SpringMVC工作流程及中文亂碼問題

簡單的談一下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" ...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章