3

GWT 2.4、Errai1.3.2を使用してWebアプリケーションを開発しています。Tomcat 6(6.0.35)で実行され、Maven(3.0.4)によってビルドされます。

このアプリケーションをTomcatで実行すると、特殊なケースの転送が機能しません。より具体的には、要求は正常に機能しますが、特殊文字の応答はそれらを�に変換します。errai mavenアーキタイプを使用する場合、同じ動作をします。errai RPCの代わりにGWT-RPCを使用すると、すべてが正常に機能します。同じアプリケーションをDev-Modeで実行すると、問題は発生しません。

Chromeで要求/応答を見ると、どちらもUTF-8をエンコードする文字を使用しています。

応答を送信する前にerraiに文字列エンコーディングがあるため、これはerraiのバグである可能性があると思います。

誰かが私を助けてくれるなら、それは素晴らしいことです!それは本当にトリッキーな問題です...

ありがとう、ウォルター


PS:私はすでに次の潜在的な解決策を試しましたが、すべてが機能しません:

index.htmlヘッドの設定:

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

カスタムサーブレットフィルタを定義する

WEB.xml

<filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>at.apa.excelsa.web.server.SessionFilter</filter-class>
    <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

Filter.java

public class SessionFilter implements Filter {

String encoding;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    encoding = filterConfig.getInitParameter("requestEncoding");
    if (encoding == null) {
        encoding = "UTF-8";
    }
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    if(request.getCharacterEncoding()==null) {
        request.setCharacterEncoding(encoding);
    }

    response.setContentType("text/html; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");

    chain.doFilter(request, response);
}

TomcatServer.xmlでURIEncodingを設定する

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8" />

pom.xmlのMaven

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...
<build>
    <outputDirectory>war/WEB-INF/classes</outputDirectory>
        <plugins>
             <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>${gwt.maven}</version>
                <configuration>
                    ...
                    <extraJvmArgs>-Xmx512m **-Dfile.encoding=UTF-8**</extraJvmArgs>
                    ...
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>resources</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
4

2 に答える 2

1

ほぼ2日間の検索の後、解決策が見つかりました。問題を解決するには、Tomcatに次のJVM引数が必要です。

-Dfile.encoding=UTF-8 

BRウォルター

于 2012-02-21T08:29:18.503 に答える
0

Errai 2.0をチェックすることを検討しましたか?http://errai-blog.blogspot.com/2012/02/quick-tour-of-errai-20.html

于 2012-02-20T17:38:09.320 に答える