如何为某个Web应用程序配置URIEncoding?

时间:2012-01-18 11:15:01

标签: java tomcat encoding

如果我需要为tomcat实例中部署的所有应用程序设置相同的编码,我可以编辑server.xml并添加如下部分:

<Connector port="8081" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" 
   URIEncoding="UTF-8"/>

有没有办法为某个应用程序指定编码? (也许在web.xml或其他地方)?

2 个答案:

答案 0 :(得分:5)

如果您使用Spring MVC,您可以在web.xml中使用CharacterEncodingFilter,如下所示:

<filter> 
    <filter-name>encodingFilter</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>encodingFilter</filter-name> 
    <servlet-name>my-spring-dispatcher-servlet</servlet-name> 
</filter-mapping>

如果没有,您需要编写一个类似于:

的过滤器
httpRequest.setCharacterEncoding("UTF-8")

修改

确实需要在Tomcat中指定useBodyEncodingForURI="true" 5 + ,以使此过滤器生效:

<Connector port="8081" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" 
   useBodyEncodingForURI="true" />

答案 1 :(得分:2)

据我所知,web.xml不允许你想要的东西,所以我建议采用以下方法。

  1. 每页设置一次(例如,对于JSP <%@page pageEncoding="UTF-8" %>
  2. 使用HTTP过滤器设置编码。在这种情况下,您不必单独为每个页面设置它。
  3. 如果您使用的是Web框架,请尝试使用它提供的工具。例如,对于Struts,您可以在模板定义中定义编码。