javaweb Filter过滤器-设置字符集(简单版)

说明

之前从表单获取数据,需要设置字符集,否则中文乱码,如下:

req.setCharacterEncoding("UTF-8");

输出中文时,也需要设置字符集,否则中文乱码,如下:

resp.setContentType("text/html; charset="+charset);

通过过滤器实现这一功能,就不用每次都在 jsp、Servlet中设置了

java

public class CharsetFilter implements Filter {

    private String charset;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        charset=filterConfig.getInitParameter("charset");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain fc) throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest)servletRequest;
        HttpServletResponse resp=(HttpServletResponse)servletResponse;

        req.setCharacterEncoding(charset);
        resp.setCharacterEncoding(charset);
        // 有 resp.setCharacterEncoding(charset) 代码,就不需要下面代码
        // resp.setContentType("text/html; charset="+charset);
        // 让过滤器继续往下执行,如果不加此代码,过滤器不再执行,导致页面显示空白
        fc.doFilter(req,resp);
    }

}

缺点

访问 html 页面时,会产生乱码,详见:javaweb Filter过滤器设置编码,导致html乱码

配置web.xml

<filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>top.malaoshi.CharsetFilter</filter-class>
    <init-param>
        <param-name>charset</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

原文出处:/show_1IX40rT1ir1R.html