要学习一项技术,首先要知道, 它是什么, 为何要用它 , 它由哪些东西组成, 每一个东西是干什么的, 它们怎么综合在一块儿的html
参考博客: 平凡希: http://www.javashuo.com/article/p-rilofvhd-cd.html前端
幸运草铃兰: http://www.javashuo.com/article/p-dxdijluh-go.htmlajax
参考书籍:《JavaEE 互联网轻量级框架整合开发 SSM框架和Redis实现》数据库
一.SpringMVC是什么?后端
SpringMVC是Spring框架后续开发的一个模块, 它是一个基于MVC模式的开发框架.数据结构
早期的MVC由Servlet, JavaBean, JSP组成, 用户请求先到达Servlet, Servlet做为控制器接收请求,而后调度JavaBean来读写数据库的数据,最后将处理结果放在JSP中,返还展示给用户.app
这样的模式就是MVC模式, Servlet扮演Controller(控制器)角色, JavaBean扮演Model(模型)角色, JSP扮演View(视图)角色. 这样设计的好处就是, 先后端有了必定的分离, 前端与后端只有必定的数据交流, 减小了必定的耦合(依然有耦合), 而控制器和模型的分离,使得大量代码有了重用的可能.框架
传统的MVC框架仍是存在着必定的耦合性, 好比模型层夹杂着业务层和数据库的访问, 因此SpringMVC把传统的模型层拆分为了:Service(业务层)和DAO(数据访问层). 在Service下能够经过Spring的声明式事务操做数据访问层, 而在业务层上还容许咱们访问NoSQL,这样能知足现代互联网系统的性能.性能
SpringMVC最大的特色是结构松散, 耦合度较低, 对各个模块进行了分离,使得各自负责各自的逻辑.学习
二.为何要用SpringMVC?
SpringMVC的特色已经在上面描述过了, 就是在传统MVC模式下,将Model层拆分为 Service和DAO. 其最大的特点就是结构松散, 好比几乎能够在SpringMVC中使用各种视图, 包括JSON,JSP,XML,PDF等,因此它能知足手机端,页面端和平板电脑端的各种请求.
SpringMVC和Struts对比:
①SpirngMVC的入口是Servlet, Struts是Filter
②SpringMVC是基于方法设计的,而Struts是基于类设计的,每次发一次请求都会实例一个Action
③SpringMVC更加简洁,开发效率比Struts高, 可以处理ajax请求
三.SpringMVC的组件与流程
1.组件:
①核心控制器 DispatcherServlet :
做用: 接收请求, 响应结果 , 下降组件之间的耦合度
SpringMVC框架是围绕DispatcherServlet工做的, 它是整个流程控制的中心. 它负责协调和组织不一样组件完成请求处理并返回响应工做.
②处理器映射器 HandlerMapping:
做用: 根据请求路径找到相应的处理器
HandlerMapping根据用户的请求找到对应的Handler(它多是一个Controller方法, 也多是一个Controller对象,Servlet对象 或者 HttpRequestHandler对象), 并将Handler与一堆HandlerInterceptor(拦截器)封装到HandlerExecutionChain对象中
SpringMVC能够根据不一样的方式来进行处理器的映射 , 如:配置文件方式, 注解方式, 实现接口方式等.
③处理器适配器 HandlerAdapter:
做用: 根据Handler找到支持它的HandlerAdapter, 而后经过这个HandlerAdapter来执行这个Handler和其拦截器, 最终获得ModelAndView对象.
就像上面的Handler种类说的, 根据Handler的不一样,适配的HandlerAdapter的种类也不一样. 他多是SimpleControllerHandlerAdapter(Controller类型的Handler), 也多是SimpleServletHandlerAdapter(Serlvet类型的Hand;er), 或者HttpRequestHandlerAdapter(HttpRequestHandler类型的Handler)
④视图解析器 ViewResolver :
做用:进行视图解析, 把一个逻辑上的视图名称解析为一个真正的视图(View对象)
ViewResolver负责将处理结果生成View视图, ViewResolver首先根据逻辑视图名称解析成物理视图名即具体的页面地址, 再生成View视图对象, 最后对View进行渲染将处理结果经过页面展现给用户. SpringMVC提供了不少View视图类型, 包括:jstlView , freemarkerView, pdfView等.
⑤处理器 Handler :
做用: 处理具体的用户请求
能够理解为广义上的Controller, 和在HandlerAdapter中所描述的同样, Handler有不少种,它多是一个Controller的方法, 一个Controller, 一个Servlet, 一个HttpRequestHandler, 可是它们的做用都是为了处理具体的用户请求.
⑥视图 View :
做用: View接口的主要做用是用于处理视图, 而后返回给客户端.
2.组件控制流程:
图片转自:http://www.javashuo.com/article/p-rilofvhd-cd.html
流程简介:
1.用户发送请求>>>>>DispatcherServlet:
DispatcherServlet受到请求后,本身不作处理,而是首先委托HandlerMapping进行第一步处理,本身只做为统一访问点, 进行全局的流程控制
2.DispatcherServlet>>>>>>>HandlerMapping:
HandlerMapping根据请求查找对应的Handler, 并将Handler对象和其多个HandlerInterceptor(拦截器)对象包装为一个HandlerExecutionChain(执行链)对象 并返回给DispatcherServlet
3.DispatcherServlet>>>>>>>HandlerAdapter:
HandlerAdapter根据Handler的种类,找到支持对应类型的适配器,如SimpleControllerHandlerAdapter支持Controller类型的Handler, 这样Handler就能够在适合的运行环境下运行. 对应类型HandlerAdapter会执行对应的Handler, 以及执行目标方法先后须要执行的拦截器. 最终完成功能处理, 并返回一个ModelAndView对象到DispatcherServlet;
4.DispatcherServlet>>>>>>>ViewResolver:
根据ModelAndView的逻辑视图名, ViewResolver将其解析为具体的View对象.
5.View >>>>> 渲染
View对象会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,所以很容易支持其余视图技术;
6.返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。