2014-01-11 74 views
1

好的,我花了 七個小時的谷歌搜索和測試,我放棄了,我不得不尋求幫助。 我曾經在Linux中開發過,一切都很簡單,現在我使用Windows,並且像設置正確的語言環境這樣簡單的東西不起作用。 與JPA的Servlet字符編碼問題

我創建了簡單的JSP與形式:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<form action="save-user" method="post"> 
    Name: <input type="text" name="name"><br> 
    Email: <input type="text" name="email"><br> 
    <input type="submit" value="Save"> 
</form> 

和servlet:

String name = request.getParameter("name"); 
    String email = request.getParameter("email"); 

我收到LeoÅ¡而不是獅子座。我使用WildFly 8.0RC1,Windows 8 czech,firefox。

我已經試過什麼:

  1. request.setCharacterEncoding( 「UTF-8」);先讀取 參數
  2. 過濾器使用request.setCharacterEncoding(「UTF-8」);
  3. JVM屬性-Dfile.encoding = UTF-8
  4. 刪除標準JEE從戰爭
  5. 修復戰爭包裝
  6. 分割項目,WEB和EJB模塊

當JPA實體/ DAO堆疊罐被部署,然後變音符被破壞。如果我從servlet註釋掉實體並從戰爭中刪除JPA實體(目前從WEB-INF/lib中刪除OAuthLoginEJB.jar),那麼我會收到正確的編碼。如果我添加了這個EJB,那麼它又會失敗。它是JBoss/WildFly的bug嗎?

我可以提供完整的來源:https://drive.google.com/file/d/0B-adlc5KThQDWTdYOEwxOUpTVEU/edit?usp=sharing 它已準備好運行,您甚至不需要鍵入捷克字母,因爲它們已預先填好。謝謝

+0

不知道它的大小寫,但是你的項目配置爲在IDE中使用UTF-8? – watery

+0

http://stackoverflow.com/questions/8391675/utf-8-encoding-a-servlet-form-submission-with-tomcat –

+0

想法顯示文件是UTF8編碼 –

回答

2

馬爾科從WildFly dev郵件列表向我指出這個缺陷:https://issues.jboss.org/browse/CDI-411和此變通辦法:http://weld.cdi-spec.org/documentation/#3

當我修改web.xml中,它開始工作了:如果

<filter> 
    <filter-name>EncodingFilter</filter-name> 
    <filter-class>cz.literak.demo.oauth.servlets.EncodingFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>EncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
     <filter-name>CDI Conversation Filter</filter-name> 
     <url-pattern>/*</url-pattern> 
</filter-mapping> 
1

您需要在從請求InputStream首次讀取之前調用request.setCharacterEncoding("UTF-8")。在您的servlet中設置編碼之前,參數可以被過濾器讀取。可能是OAuthLoginEJB.jar或其他依賴項中有一些過濾器,它首先讀取參數?通常,這是用於調試的一些參數...使用Servlet API 3.0,servlet和過濾器可以通過註釋進行註冊,因此儘管存在空的web.xml,仍可以註冊一些過濾器。

+0

查看源代碼,這是非常原始的應用程序。我剛剛在調試過程中意識到請求持有填充parsedData屬性已經在我的過濾器中,我可以在調用堆棧中看到其他一些過濾器,我將下載源代碼以查看它是什麼。 –