Springmvc解決中文亂碼問(wèn)題
- 本人獨(dú)立博客https://chenjiabing666.github.io
POST
- 在表單提交的時(shí)候,如果遇到中文亂碼的情況副签,springmvc提供了一個(gè)
CharacterEncodingFilter
過(guò)濾器帆疟,我們只需要在web.xml
文件中配置即可
注意
- 表單的提交方式必須是
post
- 在
web.xml
中配置CharacterEncodingFilter
編碼格式要和JSP
頁(yè)面的編碼格式一致 - 解決中文亂碼必須使用過(guò)濾器(在DispatcherServlet之前執(zhí)行)隆圆,而不能使用springmvc的攔截器,因?yàn)檫^(guò)濾器在
DispatcherServlet
之前阻桅,所以設(shè)置好編碼后凉倚,DispatcherServlet
和Controller
都可以獲取到正確的數(shù)據(jù)兼都,而攔截器運(yùn)行在DispatcherServlet
之后,也即是意味著DispatcherServlet
獲取的數(shù)據(jù)已經(jīng)是亂碼稽寒,那么在攔截器中調(diào)整亂碼是沒(méi)有意義的
在web.xml
配置
<!-- 配置 CharacterEncodingFilter解決中文亂碼問(wèn)題-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 配置編碼格式為UTF-8 -->
<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
- 即使配置了中文亂碼過(guò)濾器
CharacterEncodingFilter
扮碧,但是這個(gè)只會(huì)針對(duì)POST
請(qǐng)求才會(huì)起作用蓬抄,如果我們?cè)谑褂?code>GET請(qǐng)求的時(shí)候攜帶的參數(shù)有中文的話浩淘,那么服務(wù)器接收的時(shí)候就會(huì)產(chǎn)生中文亂碼。 - 我們?cè)趀clipse中修改
Tomcat
的server.xml
文件中的內(nèi)容參數(shù)即可本辐,如下:
server.xml
- 我們只需要在
<connector connectionTimeout="20000"......>
在這個(gè)最后加上URIEncoding="UTF-8"
即可
總結(jié)
- 那么以后創(chuàng)建項(xiàng)目時(shí)候的完整的web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Springmvc</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置前端控制器DispatcherServlet -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置springMVC配置文件的路徑宏侍,這里如果想要使用默認(rèn)的可以不用配置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- classpath表示根路徑赖淤,這里找的項(xiàng)目根路徑下的applicationContext.xml -->
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<!-- 當(dāng)tomcat啟動(dòng)的時(shí)候就加載,設(shè)置啟動(dòng)的優(yōu)先級(jí) -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!-- 配置分發(fā)規(guī)則谅河,這個(gè)是用來(lái)控制所有的請(qǐng)求,只要是請(qǐng)求后綴為.do的都會(huì)攔截分發(fā) -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 配置 CharacterEncodingFilter解決中文亂碼問(wèn)題-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 配置編碼格式為UTF-8 -->
<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>
</web-app>