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

Rom*_*man 5 java encoding tomcat

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

<Connector port="8081" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" 
   URIEncoding="UTF-8"/>
Run Code Online (Sandbox Code Playgroud)

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

rus*_*tyx 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>
Run Code Online (Sandbox Code Playgroud)

如果没有,您需要编写一个类似于以下内容的过滤器:

httpRequest.setCharacterEncoding("UTF-8")
Run Code Online (Sandbox Code Playgroud)

编辑:

需要useBodyEncodingForURI="true"在Tomcat 5+中指定此过滤器才有效:

<Connector port="8081" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" 
   useBodyEncodingForURI="true" />
Run Code Online (Sandbox Code Playgroud)


Ale*_*exR 2

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

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