在WildFly上使用UTF-8编码servlet

Sam*_*mir 7 encoding servlets utf-8 wildfly

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

file.encoding = UTF-8
Run Code Online (Sandbox Code Playgroud)

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

snapshot1

snapshot2

use*_*037 19

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>
Run Code Online (Sandbox Code Playgroud)

使用url-charsetdefault-encoding设置不需要过滤器.


cod*_*ent -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);
    }

}
Run Code Online (Sandbox Code Playgroud)

网络.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>
Run Code Online (Sandbox Code Playgroud)