【问题标题】:UTF-8 Encoding doesn't work with Errai and TomcatUTF-8 编码不适用于 Errai 和 Tomcat
【发布时间】:2012-03-10 18:13:12
【问题描述】:

我们正在使用 GWT 2.4、Errai 1.3.2 开发一个 Web 应用程序。它在 Tomcat 6 (6.0.35) 上运行,由 Maven (3.0.4) 构建。

在 Tomcat 上运行此应用程序时,特殊情况的传输不起作用。更具体地说,请求工作正常,但特殊字符的响应将它们转换为�。当使用 errai maven 原型时​​,它具有相同的行为。当使用 GWT-RPC 而不是 erai RPC 时,一切正常。在开发模式下运行相同的应用程序,不会出现问题。

在 chrome 中查看请求/响应时,两者都具有 UTF-8 字符编码。

我认为这可能是一个错误,因为在发送响应之前,错误中存在一些字符串编码。

如果有人可以帮助我,那就太好了!真是个棘手的问题……

谢谢,沃尔特


PS:我已经尝试了以下可能的解决方案,但都不起作用:

设置 index.html 头:

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

定义自定义 Servlet 过滤器

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>

过滤器.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);
}

关于 Tomcat Server.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>
            ...

【问题讨论】:

    标签: java gwt tomcat utf-8 errai


    【解决方案1】:

    经过近2天的搜索,我找到了解决方案:Tomcat需要以下JVM参数才能解决问题:

    -Dfile.encoding=UTF-8 
    

    BR沃尔特

    【讨论】:

    • 谢谢!只是对像我这样的其他 Java 新手的澄清:在我的 ubuntu 机器上,它是通过在 /etc/default/tomcat7 上的 JAVA_OPTS 上添加“-Dfile.encoding=UTF-8”来完成的
    【解决方案2】:

    【讨论】:

    • 您好,我尝试迁移到 Errai 2.0,但如果不对应用程序进行一些更改,它就无法工作。由于我们几乎完成了实施,因此我不想进行更改。但无论如何,我用 erai 1.3.2 解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2022-01-04
    • 2011-09-24
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多