Spring with Tomcat 中文编码问题的解决方案
由于各种原因,Java 应用中有关中文编码的问题总是层出不穷,即使是在 i18n 发展已久的今日,为了能够在 Java 应用中良好地使用中文,程序员们仍然要花费许多额外的力气来调试、设置以解决有关中文编码的问题。针对在 Tomcat 服务器上运行的 Spring 应用,我总结了一些相关的经验,希望能帮助其他人在处理该问题时能少走一些弯路。以下条目纯属个人在开发中摸索出来的经验,并不一定适用于所有情况。在解决中文编码的问题时,也不一定需要将以下所罗列的条目逐一设置,往往只需要结合自己开发中的实际情况修改其中若干项目即可。
1. 修改 $CATALINA_HOME/conf/server.xml。
找到 Connector 的配置,添加 URIEncoding 属性,例如:
<Connector?URIEncoding="UTF-8"?port="8080"?protocol="HTTP/1.1"?????????? connectionTimeout="20000"?????????? redirectPort="8443"?/>
JAVA_OPTS="$JAVA_OPTS?"-Djavax.servlet.request.encoding=UTF-8"?"-Dfile.encoding=UTF-8""
<filter>
????<filter-name>setCharacterEncoding</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>
<!--?filtered?type?-->
<filter-mapping>
????<filter-name>setCharacterEncoding</filter-name>
????<url-pattern>*.do</url-pattern>
</filter-mapping>
<bean?id="viewResolver"
????class="org.springframework.web.servlet.view.InternalResourceViewResolver">
????<property?name="viewClass"
????????value="org.springframework.web.servlet.view.JstlView"?/>
????<property?name="prefix"?value="/"?/>
????<property?name="suffix"?value=".jsp"?/>
????<property?name="contentType">
????????<value>text/html;charset=UTF-8</value>
????</property>
</bean>
<%@?page?language="java"?contentType="text/html;?charset=UTF-8"?pageEncoding="UTF-8"%>
<plugin>
????<artifactId>maven-compiler-plugin</artifactId>
????<configuration>
????????<source>1.6</source>
????????<target>1.6</target>
????????<encoding>UTF-8</encoding>
????</configuration>
</plugin>
...@Override
protected?ModelAndView?handleRequestInternal(HttpServletRequest?request,
????????HttpServletResponse?response)?throws?Exception?{
????response.setCharacterEncoding("UTF-8");
????return?super.handleRequestInternal(request,?response);
}?