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

2024-04-08

我使用 Maven 3.3 和 JBoss 7.1.3.Final (Java 6)。我想在我的 Web 应用程序中包含一个过滤器,以便所有传入请求数据都将编码为 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. 该过滤器是 Tomcat 服务器的一部分 https://tomcat.apache.org/tomcat-8.5-doc/config/filter.html#Set_Character_Encoding_Filter,不是 JBoss 服务器。
  2. 该 Maven 依赖项基本上将 Tomcat 的引擎安装在 Web 应用程序中。如果您实际上使用 JBoss AS,这只会与服务器自己的 Tomcat 引擎发生冲突。
  3. 您说您正在使用 JBoss AS,但该错误消息特定于 JBoss WildFly。

我假设您确实针对 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">

如果你是actually使用 JBoss AS 7.x 并且该错误只是从测试环境中不小心复制粘贴的,在 JBoss AS 7.x(因此不是 6.x 或更低版本!)中启用 UTF-8 的正确方法是编辑其/standalone/configuration/standalone.xml在之间添加以下条目<extensions> and <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);
    }

    // ...
}

只需将该类放到 web 应用程序中的任何位置(而不是 JAR 中),它就会自动完成其工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐