【问题标题】:Java web tomcat encoding filter doesnt workJava web tomcat编码过滤器不起作用
【发布时间】:2015-10-06 01:23:47
【问题描述】:

我使用 intellij idea 和 tomcat 8,这是我的过滤器:

@WebFilter(urlPatterns = { "/*" }, initParams = {@WebInitParam(name = "encoding", value = "UTF-8", description = "Encoding Param") })
public class EncodingFilter implements Filter {

    private String code;

    public void init(FilterConfig filterConfig) throws ServletException {
        code = filterConfig.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String codeRequest = servletRequest.getCharacterEncoding();
        if (code != null && !code.equalsIgnoreCase(codeRequest)) {
            servletRequest.setCharacterEncoding(code);
            servletResponse.setCharacterEncoding(code);
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void destroy() {
        code = null;
    }
}

我不明白为什么,但它不起作用,当我输入英文单词时一切正常,但是当我输入俄语字母时,它是这样的:

String address = request.getParameter(PARAM_NAME_ADDRESS); 
//**address : ЮзеÑова 12 144**

我的jsp中有这个:

<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>

可能是什么问题?

【问题讨论】:

    标签: java tomcat servlets encoding servlet-filters


    【解决方案1】:

    需要在页面上设置编码:

    <head>
        <meta charset="UTF-8">
    </head>
    

    还有(为了完整性)在表单元素中:

    <form action="..." accept-charset="UTF-8">
    

    【讨论】:

      【解决方案2】:

      This question帮了我

      问题出在监听器上,我删除了它

      @WebListener
      public class RequestListener implements ServletRequestListener {
      
          private final static Logger LOG = Logger.getLogger(RequestListener.class);
      
          @Override
          public void requestInitialized(ServletRequestEvent servletRequestEvent) {
              String command = servletRequestEvent.getServletRequest().getParameter("command");
              HttpServletRequest request = (HttpServletRequest)servletRequestEvent.getServletRequest();
              LOG.info("Request initialized. Command: " + command + " " + request.getContextPath());
          }
      
          @Override
          public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
              String command = servletRequestEvent.getServletRequest().getParameter("command");
              LOG.info("Request destroyed. Command: " + command);
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-08
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多