2016-12-01 97 views
4

我使用Maven 3.3和JBoss 7.1.3.Final(Java 6)。我想在我的Web應用程序中包含一個過濾器,以便所有傳入的請求數據都將被編碼爲UTF-8。所以我說這我的web.xml文件如何在我的Maven項目中正確包含「org.apache.catalina.filters.SetCharacterEncodingFilter」過濾器?

<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

您聲稱您使用的是JBoss 7.1.3,但是您的錯誤消息來自直到WildFly 8.x纔出現的錯誤消息。 @BalusC:我認爲所有JBossAS版本(不包括基於WildFly的JBoss EAP)都使用Tomcat作爲其Web容器的基礎;他們在將名稱更改爲WildFly的時候開始轉向 –

回答

4

這個問題在第一位沒有意義。

  1. That filter is part of Tomcat server,而不是JBoss服務器。
  2. Maven依賴關係基本上將Tomcat的引擎安裝在webapp中。這隻會與服務器自己的Tomcat引擎相沖突,以防您實際使用JBoss AS。
  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"> 

如果你實際上使用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)中的任何地方,它就會自動完成它的工作。

相關問題