SpringMVC框架介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SpringMVC框架介绍
⼀、什么是 SpringMVC ?
SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展⽰请求结果视图。
其中核⼼类是,它是⼀个Servlet,顶层是实现的Servlet接⼝。
在介绍什么是 SpringMVC 之前,我们先看看 Spring 的基本架构。
如下图:
我们可以看到,在 Spring 的基本架构中,红⾊圈起来的 Spring Web MVC ,也就是本系列的主⾓ SpringMVC,它是属于Spring基本架构⾥⾯的⼀个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow⾥⾯,所以我们在后期和 Spring 进⾏整合的时候,⼏乎不需要别的什么配置。
SpringMVC 是类似于 Struts2 的⼀个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进⾏处理,然后返回页⾯进⾏显⽰,但是上⼿难度却⽐ Struts2 简单。
⽽且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了⼤多数企业优先选择的框架。
⼆、SpringMVC流程图详解
要把SpringMVC流程图搞明⽩,⾸先需要先搞明⽩6个组件
1.DisPatcherServlet 前端控制器
核⼼。
⽤户在浏览器输⼊url,发起请求,⾸先会到达DisPatcherServlet,由它来调⽤其他组件来配合⼯作的完成,DisPatcherServlet的存在⼤⼤降低了组件之间的耦合性
2.HandlerMapping 处理器映射器
记录url与处理器的映射,⽅式有注解、XML配置等
3.HandLer 处理器
后端控制器(通俗⼀点:Controller层所写的业务代码)。
对⽤户的请求进⾏处理
4.HandlerAdapter 处理器适配器
通过HandlerAdapter对处理器进⾏执⾏,这是适配器模式的应⽤,通过扩展适配器可以对更多类型的处理器进⾏执⾏。
(我也不太明⽩) 5.ViewResolver 视图解析器
ViewResolver负责解析view视图,并进⾏渲染(数据填充),将处理结果通过页⾯展⽰给⽤户看
6.View 视图
View是⼀个接⼝,实现类⽀持不同的View类型(jsp、freemarker、velocity)
⼀般情况下需要通过页⾯标签或者页⾯模板技术将模型数据通过页⾯展⽰给⽤户,需要由程序员根据业务需求开发具体的页⾯。
【流程图说明】
1.⽤户发送请求⾄前端控制器DispatcherServlet。
2.前端控制器DispatcherServlet收到请求后调⽤处理器映射器HandlerMapping。
3.处理器映射器HandlerMapping根据请求的Url找到具体的处理器,⽣成处理器对象Handler及处理器拦截器HandlerIntercepter(如果有则⽣成)⼀并返回给前端控制器DispatcherServlet。
4.前端控制器DispatcherServlet通过处理器适配器HandlerAdapter调⽤处理器Controller。
5.执⾏处理器(Controller,也叫后端控制器)
6.处理器Controller执⾏完后返回ModelAnView。
7.处理器映射器HandlerAdapter将处理器Controller执⾏返回的结果ModelAndView返回给前端控制器DispatcherServlet。
8.前端控制器DispatcherServlet将ModelAnView传给视图解析器ViewResolver。
9.视图解析器ViewResolver解析后返回具体的视图View。
10.前端控制器DispatcherServlet对视图View进⾏渲染视图(即:将模型数据填充⾄视图中)
11.前端控制器DispatcherServlet响应⽤户。
三、配置
四、扩展
1.解决post请求乱码问题
在web.xml中配置
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.解决get请求中的中⽂乱码问题
a.第⼀种:修改tomcat配置⽂件添加编码与⼯程编码⼀致,如下:
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
b.第⼆种:对参数进⾏重新编码(ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码)
String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
3.SpringMVC与Struts2的主要区别?
①springmvc的⼊⼝是⼀个servlet即前端控制器,⽽struts2⼊⼝是⼀个filter过虑器。
②springmvc是基于⽅法开发,传递参数是通过⽅法形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
③Struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据通过request对象传输到页⾯。
Jsp视图解析器默认使⽤jstl。