1.简单的谈一下SpringMVC的工作流程?
流程
1 、用户发送请求至前端控制器 DispatcherServlet
2 、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3 、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器 ( 如果有则生成 ) 一并返回给 DispatcherServlet 。
4 、 DispatcherServlet 调用 HandlerAdapter 处理器适配器
5 、 HandlerAdapter 经过适配调用具体的处理器 (Controller ,也叫后端控制器 ) 。
6 、 Controller 执行完成返回 ModelAndView
7 、 HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet
8 、 DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器
9 、 ViewReslover 解析后返回具体 View
10 、 DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
11 、 DispatcherServlet 响应用户
1 、用户发送请求至前端控制器 DispatcherServlet
2 、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3 、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器 ( 如果有则生成 ) 一并返回给 DispatcherServlet 。
4 、 DispatcherServlet 调用 HandlerAdapter 处理器适配器
5 、 HandlerAdapter 经过适配调用具体的处理器 (Controller ,也叫后端控制器 ) 。
6 、 Controller 执行完成返回 ModelAndView
7 、 HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet
8 、 DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器
9 、 ViewReslover 解析后返回具体 View
10 、 DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
11 、 DispatcherServlet 响应用户
2. 如何解决POST请求中文乱码问题,GET的又如何处理呢?
在 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>
以上可以解决 post 请求乱码问题。对于 get 请求中文参数出现乱码解决方法有两个:
修改 tomcat 配置文件添加编码与工程编码一致,如下:
< Connector URIEncoding = "utf-8" connectionTimeout = "20000" port = "8080" protocol = "HTTP/1.1" redirectPort = "8443"/>
另外一种方法对参数进行重新编码:
String userName = new
String ( request . getParamter ( "userName" ). getBytes ( "ISO8859-1" ), "utf-8" )
ISO8859-1 是 tomcat 默认编码,需要将 tomcat 编码后的内容按 utf-8 编码
3.SpringMVC与Struts2的主要区别?
① springmvc 的入口是一个 servlet 即前端控制器,而 struts2 入口是一个 filter 过虑器。
② springmvc 是基于方法开发,传递参数是通过方法形参 ,可以设计为单例或多例 ( 建议单例 ) , struts2 是基于类开发,传递参数是通过类的属性 ,只能设计为多例。
③ Struts 采用值栈存储请求和响应的数据,通过 OGNL 存取数据, springmvc 通过参数解析器是将 request 对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView 对象,最后又将模型数据通过 request 对象传输到页面。 Jsp 视图解析器默认使用 jstl 。
③ Struts 采用值栈存储请求和响应的数据,通过 OGNL 存取数据, springmvc 通过参数解析器是将 request 对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView 对象,最后又将模型数据通过 request 对象传输到页面。 Jsp 视图解析器默认使用 jstl 。