簡單的談一下SpringMVC的工作流程
- 用戶發送請求至前端控制器DispatcherServlet
- DispatcherServlet收到請求調用HandlerMapping處理器映射器。
- 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
- DispatcherServlet通過HandlerAdapter處理器適配器調用處理器
- 執行處理器(Controller,也叫後端控制器)。
- Controller執行完成返回ModelAndView
- HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
- DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
- ViewReslover解析後返回具體View
- DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
- DispatcherServlet響應用戶
解決SpringMVC框架中POST請求提交中文會亂碼的問題
SpringMVC框架默認使用的編碼都是ISO-8859-1,這種編碼是不支持中文的!
如果要使得每個請求提交的數據都使用utf-8編碼,是不可以使用攔截器來實現的,因爲攔截器在DispatcherServlet 之後纔會被執行,而DispatcherServlet在接收請求參數時已經按照默認編碼進行處理了,後續再聲明接收請求參數的編碼,是沒有任何意義的!所以,解決這個問題,只能通過過濾器來解決!
在SpringMVC框架中,本身就提供了CharacterEncodingFilter的過濾器類!所以,只需要在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>
解決GET請求中文亂碼
tomcat8版本及以上是不需要配置的
tomcat7及以下低版本的需要在Servers下的server.xml中配置URIEncoding="UTF-8"
(大概在第65行左右)
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" ...