如何在我的Maven项目中正确包含“org.apache.catalina.filters.SetCharacterEncodingFilter”过滤器?

时间:2016-12-01 23:55:24

标签: maven tomcat utf-8 jboss servlet-filters

我正在使用Maven 3.3和JBoss 7.1.3.Final(Java 6)。我想在我的网络应用程序中包含一个过滤器,以便所有传入的请求数据都将编码为UTF-8。所以我把它添加到我的web.xml文件

<filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
        <filter-name>CharsetFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

和Maven的依赖......

            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-catalina</artifactId>
                <version>7.0.0</version>
            </dependency>

但在部署我的应用程序时,我收到以下错误......

WFLYCTL0186:   Services which failed to start:      service jboss.undertow.deployment.default-server.default-host./myproject.UndertowDeploymentInfoService: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./myproject.UndertowDeploymentInfoService: java.lang.ClassNotFoundException: org.apache.catalina.filters.SetCharacterEncodingFilter from [Module "deployment.myproject.war:main" from Service Module Loader]

我需要包含哪些依赖项才能成功部署我的应用程序?

1 个答案:

答案 0 :(得分:5)

这个问题首先没有意义。

  1. That filter is part of Tomcat server,而不是JBoss服务器。
  2. Maven依赖基本上是在webapp中安装Tomcat的引擎。这只会与服务器自己的Tomcat引擎发生冲突,以防你真正使用JBoss AS。
  3. 您说您正在使用JBoss AS,但该错误消息特定于JBoss WildFly。
  4. 我假设你确实以JBoss WildFly为目标,因此不是Apache Tomcat和JBoss AS。在JBoss WildFly中启用UTF-8的正确方法是编辑其/standalone/configuration/standalone.xml以更改以下行:

    <servlet-container name="default">
    

    添加default-encoding属性:

    <servlet-container name="default" default-encoding="UTF-8">
    

    如果您使用JBoss AS 7.x 实际 并且该错误仅仅是在测试环境中进行了非常谨慎的复制,那么在JBoss AS 7.x中启用UTF-8的正确方法(因此不是6.x或更低!)是编辑其/standalone/configuration/standalone.xml以在<extensions><management>条目之间添加以下条目:

    <system-properties>
        <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8" />
    </system-properties>
    

    如果您不允许操纵服务器配置和/或希望尽可能保持Web应用程序在不同服务器上的可移植性,那么只需自己创建该过滤器即可。以下是基本路线:

    @WebFilter("/*")
    public class CharacterEncodingFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
    
        // ...
    }
    

    只需将该类放在您的webapp中的任何位置(而不是JAR中),它就会自动完成其工作。