我正在使用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]
我需要包含哪些依赖项才能成功部署我的应用程序?
答案 0 :(得分:5)
这个问题首先没有意义。
我假设你确实以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中),它就会自动完成其工作。