Java 如何为某个web应用程序配置URI编码?

Java 如何为某个web应用程序配置URI编码?,java,tomcat,encoding,Java,Tomcat,Encoding,如果我需要为部署在tomcat实例中的所有应用程序设置相同的编码,我可以编辑server.xml并添加如下部分: <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> <filter> <filter-name>encodingFilter</filte

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

<Connector port="8081" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" 
   URIEncoding="UTF-8"/>
<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>


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

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

  • 每页设置它(例如,对于JSP
  • 使用HTTP筛选器设置编码。在这种情况下,您不必为每个页面单独设置它
  • 如果您使用的是web框架,请尝试使用它提供的工具。例如,对于Struts,您可以在模板定义中定义编码

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

    <Connector port="8081" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" 
       URIEncoding="UTF-8"/>
    
    <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>
    
    编辑:

    您确实需要在Tomcat5+中指定
    useBodyEncodingForURI=“true”
    ,此筛选器才能生效:

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