Java Web从前端到后台经常使用框架介绍

1、SpringMVC前端

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即便用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助咱们简化开发,Spring Web MVC也是要简化咱们平常Web开发的。java

模型(Model )封装了应用程序的数据和通常他们会组成的POJO。程序员

视图(View)是负责呈现模型数据和通常它生成的HTML输出,客户端的浏览器可以解释。web

控制器(Controller )负责处理用户的请求,并创建适当的模型,并把它传递给视图渲染。redis

Spring的web模型 - 视图 - 控制器(MVC)框架是围绕着处理全部的HTTP请求和响应的DispatcherServlet的设计。算法

Spring Web MVC处理请求的流程数据库


具体执行步骤以下编程

一、 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪个页面控制器进行处理并把请求委托给它,即之前的控制器的控制逻辑部分;图2-1中的一、2步骤;设计模式

二、 页面控制器接收到请求后,进行功能处理,首先须要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,而后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的三、四、5步骤;api

三、 前端控制器收回控制权,而后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤六、7;

四、 前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束。

2、Spring

2.一、IOC容器:

IOC容器就是具备依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及创建这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。在Spring中BeanFactory是IOC容器的实际表明者。

2.二、AOP:

简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减小系统的重复代码,下降模块间的耦合度,并有利于将来的可操做性和可维护性。AOP表明的是一个横向的关系

AOP用来封装横切关注点,具体能够在下面的场景中使用:

  • Authentication 权限 

  • Caching 缓存 

  • Context passing 内容传递 

  • Error handling 错误处理 

  • Lazy loading 懒加载 

  • Debugging  调试 

  • logging, tracing, profiling and monitoring 记录跟踪 优化 校准 

  • Performance optimization 性能优化 

  • Persistence  持久化 

  • Resource pooling 资源池 

  • Synchronization 同步 

  • Transactions 事务

3、Mybatis

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎全部的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

整体流程:

(1)加载配置并初始化 

触发条件:加载配置文件 
将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求 

触发条件:调用Mybatis提供的API 
传入参数:为SQL的ID和传入参数对象 
处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操做请求 

触发条件:API接口层传递请求过来 
传入参数:为SQL的ID和传入参数对象

处理过程:

(A)根据SQL的ID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,获得最终要执行的SQL和执行传入参数。

(C)获取数据库链接,根据获得的最终SQL语句和执行传入参数到数据库执行,并获得执行结果。

(D)根据MappedStatement对象中的结果映射配置对获得的执行结果进行转换处理,并获得最终的处理结果。

(E)释放链接资源。

(4)返回处理结果将最终的处理结果返回

MyBatis 最强大的特性之一就是它的动态语句功能。若是您之前有使用JDBC或者相似框架的经历,您就会明白把SQL语句条件链接在一块儿是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句可以彻底解决掉这些痛苦。

4、Dubbo

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用协议)远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,若是没有分布式的需求,实际上是不须要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,而且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架。

一、透明化的远程方法调用,就像调用本地方法同样调用远程方法,只需简单配置,没有任何API侵入。

二、软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,下降成本,减小单点。

三、 服务自动注册与发现,再也不须要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,而且可以平滑添加或删除服务提供者。

节点角色说明: 

  • Provider: 暴露服务的服务提供方。 

  • Consumer: 调用远程服务的服务消费方。 

  • Registry: 服务注册与发现的注册中心。 

  • Monitor: 统计服务的调用次调和调用时间的监控中心。 

  • Container: 服务运行容器。

5、Maven

Maven这个个项目管理和构建自动化工具,愈来愈多的开发人员使用它来管理项目中的jar包。可是对于咱们程序员来讲,咱们最关心的是它的项目构建功能。

6、RabbitMQ

消息队列通常是在项目中,将一些无需即时返回且耗时的操做提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提升了系统的吞吐量。

RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。

Erlang是一门动态类型的函数式编程语言。对应到Erlang里,每一个Actor对应着一个Erlang进程,进程之间经过消息传递进行通讯。相比共享内存,进程间经过消息传递来通讯带来的直接好处就是消除了直接的锁开销(不考虑Erlang虚拟机底层实现中的锁应用)。

AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何经过消息交互。

7、Log4j

日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

8、Ehcache

EhCache 是一个纯Java的进程内缓存框架,具备快速、精干等特色,是Hibernate中默认的CacheProvider。Ehcache是一种普遍使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具备内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特色。

优势: 

一、 快速 

二、 简单 

三、 多种缓存策略 

四、缓存数据有两级:内存和磁盘,所以无需担忧容量问题 

五、 缓存数据会在虚拟机重启的过程当中写入磁盘 

六、能够经过RMI、可插入API等方式进行分布式缓存 

七、 具备缓存和缓存管理器的侦听接口 

八、支持多缓存管理器实例,以及一个实例的多个缓存区域 

九、提供Hibernate的缓存实现

缺点: 

一、使用磁盘Cache的时候很是占用磁盘空间:这是由于DiskCache的算法简单,该算法简单也致使Cache的效率很是高。它只是对元素直接追加存储。所以搜索元素的时候很是的快。若是使用DiskCache的,在很频繁的应用中,很快磁盘会满。

二、不能保证数据的安全:当忽然kill掉java的时候,可能会产生冲突,EhCache的解决方法是若是文件冲突了,则重建cache。这对于Cache数据须要保存的时候可能不利。固然,Cache只是简单的加速,而不能保证数据的安全。若是想保证数据的存储安全,可使用Bekeley DB Java Edition版本。这是个嵌入式数据库。能够确保存储安全和空间的利用率。

9、Redis

redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了master-slave(主从)同步。

Redis数据库彻底在内存中,使用磁盘仅用于持久性。相比许多键值数据存储,Redis拥有一套较为丰富的数据类型。Redis能够将数据复制到任意数量的从服务器。

1.二、Redis优势:

(1)异常快速:Redis的速度很是快,每秒能执行约11万集合,每秒约81000+条记录。

(2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序集合,散列数据类型。这使得它很是容易解决各类各样的问题,由于咱们知道哪些问题是能够处理经过它的数据类型更好。

(3)操做都是原子性:全部Redis操做是原子的,这保证了若是两个客户端同时访问的Redis服务器将得到更新后的值。

(4)多功能实用工具:Redis是一个多实用的工具,能够在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数等。

1.三、Redis缺点: 

(1)单线程 

(2)耗内存

10、Shiro

Apache Shiro是Java的一个安全框架,旨在简化身份验证和受权。Shiro在JavaSE和JavaEE项目中均可以使用。它主要用来处理身份认证,受权,企业会话管理和加密等。Shiro的具体功能点以下:

(1)身份认证/登陆,验证用户是否是拥有相应的身份;

(2)受权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能作事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具备某个权限;

(3)会话管理,即用户登陆后就是一次会话,在没有退出以前,它的全部信息都在会话中;会话能够是普通JavaSE环境的,也能够是如Web环境的;

(4)加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

(5)Web支持,能够很是容易的集成到Web环境; 
Caching:缓存,好比用户登陆后,其用户信息、拥有的角色/权限没必要每次去查,这样能够提升效率;

(6)shiro支持多线程应用的并发验证,即如在一个线程中开启另外一个线程,能把权限自动传播过去;

(7)提供测试支持;

(8)容许一个用户伪装为另外一个用户(若是他们容许)的身份进行访问;

(9)记住我,这个是很是常见的功能,即一次登陆后,下次再来的话不用登陆了。

文字描述可能并不能让猿友们彻底理解具体功能的意思。下面咱们以登陆验证为例,向猿友们介绍Shiro的使用。至于其余功能点,猿友们用到的时候再去深究其用法也不迟。

11、设计模式

这个算不上框架,可自行忽略,不过博主认为设计模式的思想颇有必要了解一下。

思想:

开闭原则

开闭原则就是说对扩展开放,对修改关闭。在程序须要进行拓展的时候,不能去修改原有的代码。

针对接口编程,针对接口编程,依赖于抽象而不依赖于具体。

尽可能使用合成/聚合的方式,而不是使用继承。

一个实体应当尽可能少的与其余实体之间发生相互做用,使得系统功能模块相对独立。

使用多个隔离的接口,比使用单个接口要好。

里氏代换原则

(1)子类的能力必须大于等于父类,即父类可使用的方法,子类均可以使用。

(2)返回值也是一样的道理。假设一个父类方法返回一个List,子类返回一个ArrayList,这固然能够。若是父类方法返回一个ArrayList,子类返回一个List,就说不通了。这里子类返回值的能力是比父类小的。

(3)还有抛出异常的状况。任何子类方法能够声明抛出父类方法声明异常的子类。 而不能声明抛出父类没有声明的异常。

相关文章
相关标签/搜索