javaweb Filter过滤器-设置字符集(可指定不过滤路径、文件)

说明

在过滤器中,可以设置不过滤的路径、文件

注意: 必须不过滤 .html ,否则会乱码

java代码

package top.malaoshi.web.filter;

import top.malaoshi.util.StringUtil;
import top.malaoshi.web.utils.StaticFileAndDirectory;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(
        urlPatterns = "/*",
        initParams = @WebInitParam(
                name="encoding",
                value = "UTF-8"
        )
)
public class CharEncodingFilter implements Filter {

    private String charset = "UTF-8";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String encoding = filterConfig.getInitParameter("encoding");
        if(!StringUtil.isEmpty(encoding)){
            this.charset = encoding;
        }
    }

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

        boolean b= StaticFileAndDirectory.is(req);
        if(b) {
            fc.doFilter(req,resp);
            return;
        }

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

    @Override
    public void destroy() {

    }


}

判断是否静态文件、静态目录

https://www.malaoshi.top/show_1IX71ZPTSax0.html


原文出处:/show_1IX40rYGj8Ud.html