@wxf
2018-01-20T23:23:54.000000Z
字数 1790
阅读 708
面试系列
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户
POST请求
在web.xml中添加CharacterEncodingFilter过滤器,如下:
<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>
GET请求
# 修改Tomcat配置文件conf/server.xml,添加编码与工程编码一致,如下:
<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");
Servlet是
单例多线程
的方式来处理请求的。
Struts1是单例多线程
的方式来处理请求的。
Struts2是多例单线程
的方式来处理请求的,所以不存在线程安全问题。
SpringMVC是单例多线程
的方式来处理请求的。因为Spring的IOC容器默认管理的bean是单实例的。
注意:当使用Spring管理Struts2的Action时,需要在Action中添加@Scope("prototype")注解进行修饰,从而使Action成为多例形式。这符合Struts2的要求,Struts2为每一个请求创建一个新的Action实例。当请求结束时,bean就会被jvm销毁并作为垃圾收回。