Java Web tomcat编码过滤器不起作用

时间:2015-10-06 01:23:47

标签: java tomcat servlets encoding servlet-filters

我使用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" %>

可能是什么问题?

2 个答案:

答案 0 :(得分:0)

您需要在页面上设置编码:

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

以及表单元素中的(完整性):

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

答案 1 :(得分:0)

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);
    }

}
相关问题