在 WildFly 上使用 UTF-8 对 servlet 进行编码

问题描述 投票:0回答:3

我曾经在 GlassFish 服务器上运行我的 JavaEE 应用程序,编码类型(UTF-8)没有问题,因为我在服务器的 JVM 设置中添加了以下属性:

file.encoding = UTF-8

现在,我改用 WildFly 服务器,并且我已经完成了预期的配置,将编码类型设置为 UTF-8,但字符仍然以错误的编码出现,不仅在网页上,而且在使用 Eclipse 调试应用程序时也是如此,使用(Web Servlet 请求)加载的响应数据不是 UTF-8 编码的。 以下是我在 WildFly 上所做的:

快照1

快照2

servlets encoding utf-8 wildfly
3个回答
23
投票

Wildfly 现在使用 Undertow,因此请检查配置文件中的该子系统:

<subsystem xmlns="urn:jboss:domain:undertow:3.0">
      <server name="default-server">
         <http-listener name="default" socket-binding="http" redirect-socket="https" url-charset="UTF-8" />
      </server>
      <servlet-container default-encoding="UTF-8" name="default">
         <jsp-config />
         <websockets />
      </servlet-container>
   </subsystem>

设置

url-charset
default-encoding
后,无需过滤器。


0
投票

我认为,这些情况的解决方法是,您应该在 web.xml 中的 struts 过滤器之前实现一个过滤器并验证值。之后,您可以将 unicode 解码为过滤器,并创建一个拦截器来正确编码值。

这对我有用。


-4
投票

使用CharacterEncodingFilter(就像这个,取自Spring)强制使用UTF-8作为所有请求和响应的编码:

public class CharacterEncodingFilter implements Filter {

    private String encoding;

    private boolean forceEncoding;

    @Override
    public final void init(FilterConfig filterConfig) throws ServletException {
        String encod = filterConfig.getInitParameter("encoding");
        if(encod !=null){
            encoding = encod ;
        }
        String forceEncod = filterConfig.getInitParameter("forceEncoding");
        if(forceEncod !=null){
            forceEncoding = forceEncod ;
        }
    }

    public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
            request.setCharacterEncoding(this.encoding);
            if (this.forceEncoding) {
                response.setCharacterEncoding(this.encoding);
            }
        }
        filterChain.doFilter(request, response);
    }

}

web.xml

<!-- Enforce UTF-8 Character Encoding -->
<filter>
    <filter-name>charEncodingFilter</filter-name>
    <filter-class>somepackages.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
© www.soinside.com 2019 - 2024. All rights reserved.