1) 将url映射到java类或java类的方法
2) 封装用户提交的数据
3) 处理请求-调用相关的业务处理-封装响应数据
4) 将响应的数据进行渲染 jsp html
性能较struts2好
简单、便捷、易学
天生和Spring无缝集成,使用Spring的IOC和AOP还有事务
使用约定由于配置
能够进行简单的junit测试
支持restful风格
异常处理
本地化、国际化
数据验证、类型转换等
拦截器
(1)SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离使更容易进行定制。
(2)SpringMVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成
请求-----控制器Controller(默认:DispatcherServlet)----请求委托-----给处理器(使用HandlerMapping:url映射类和HandlerAdapter:适配器。两个类结合映射到处理器类)----调用业务处理,处理器返回ModelAndView对象给核心控制器Controller(调用视图渲染器View,结果返回控制器)
详细原理:
(1)首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet)
(2)前端控制器根据用户的url请求处理器映射器(handlerMapping)查找匹配该url的handler,并返回一个执行链,
(3)前端控制器再请求处理器适配器(handlerAdapter)调用相应的handler进行处理并返回给前端控制器一个modelAndView,
(4)前端控制器将返回的逻辑视图ModelAndView交给视图解析器(ViewResolver)进行解析
(5)最后前端控制器将返回的视图View进行渲染并把数据Model装入到request域,返回给用户。
l DispatcherServlet接口
Spring提供的前端控制器,负责接收Http请求组织协调各组件。
所有的请求都经过它统一转发,在DispatcherServlet定位到Controller之前,需要借助HandlerMapping和HandlerAdapter定位到具体的Controller。
DispatcherServlet是SpringMVC的核心,它的本质是一个实现了J2EE标准中定义的HttpServlet,通过在web.xml配置
主要完成以下:
(1)截获符合特定格式的URL请求
(2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将业务层、持久层的WebApplicationContext建立关联。
(3)初始化SpringMVC的各个组件,并装配到DispatcherServlet
l HandlerMapping接口
将客户请求映射到Controller
l Controller接口
需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全且可重用。
Controller将处理用户请求,与Struts Action扮演的角色一致,当Controller处理完用户请求时,返回ModelAndView(包含模型Model和视图View)对象给前端控制器DispatcherServlet,
l ViewResolver接口
Spring提供的视图解析器ViewResolver,在web应用中查找view对象并将结果渲染给客户
SpringMVC的整个运行体系,是由DispatcherServlet、组件和容器这三者共同构成的。
DispatcherServlet是逻辑处理的调度中心,组件则是被调度的操作对象。而容器在这里所起到的作用,是协助DispatcherServlet更好地对组件进行管理。这就相当于一个工厂招了一大批的工人,并把工人划分到一个统一的工作车间而便于管理。在工厂要进行生产活动时,只需要从工作车间把工人分派到相应的生产流水线上即可。
· DispatcherServlet - 容器—— DispatcherServlet对容器进行初始化
· 容器 - 组件—— 容器对组件进行全局管理
· DispatcherServlet - 组件—— DispatcherServlet对组件进行逻辑调用
DispatcherServlet初始化主线
对于DispatcherServlet的初始化主线,我们首先应该明确几个基本观点:
· 初始化主线的驱动要素—— servlet中的init方法
· 初始化主线的执行次序—— HttpServletBean -> FrameworkServlet -> DispatcherServlet
· 初始化主线的操作对象 —— Spring容器(WebApplicationContext)和组件
参考链接:http://www.iteye.com/topic/1119598(SpringMVC深度探险)