Dav*_*ave 4 jboss tomcat utf-8 maven 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>
Run Code Online (Sandbox Code Playgroud)
和这个Maven依赖...
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>7.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但在部署我的应用程序时,我收到以下错误...
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]
Run Code Online (Sandbox Code Playgroud)
我需要包含哪些依赖项才能成功部署我的应用程序?
这个问题首先没有意义.
我假设您确实以JBoss WildFly为目标,因此不是Apache Tomcat和JBoss AS.在JBoss WildFly中启用UTF-8的正确方法是编辑它/standalone/configuration/standalone.xml以更改以下行:
<servlet-container name="default">
Run Code Online (Sandbox Code Playgroud)
添加default-encoding属性:
<servlet-container name="default" default-encoding="UTF-8">
Run Code Online (Sandbox Code Playgroud)
如果您实际上正在使用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>
Run Code Online (Sandbox Code Playgroud)
如果您不允许操纵服务器配置和/或希望尽可能地保持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);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
只需将该类放在webapp中的任何位置(而不是在JAR中),它就会自动完成其工作.