首页 > 其他分享 >Servlet24 - Filter

Servlet24 - Filter

时间:2023-01-23 17:00:14浏览次数:48  
标签:encoding void Filter Servlet24 Override servletRequest public

Filter

生命周期:init -> doFilter -> destroy

同一个请求路径 /demo01.do 中,Filter 会在 Servlet 前拦截请求

Filter

Filter 和 Servlet 类似,可以在 web.xml 中配置映射也可以直接使用 @WebFilter("/demo01.do")

@WebFilter("/demo01.do")
public class Demo01Filter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("helloA");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("helloA2");
    }

    @Override
    public void destroy() {

    }
}

多个 Filter 的顺序

Filters

在 web.xml 中配置的 Filter 按配置文件中的配置顺序

@WebFilter("/")注解的 Filter 按类名的全名排序

一般不将配置文件和注解两种方法混合使用

Filter 在中央控制器前拦截请求,可以实现为所有请求设置编码

Filter设置编码

为所有请求设置编码

@WebFilter(urlPatterns = {"*.do"},initParams = {@WebInitParam(name = "encoding",value = "UTF-8")})
public class CharacterEncodingFilter implements Filter {

    private String encoding = "UTF-8";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String encodingStr = filterConfig.getInitParameter("encoding");
        if(StringUtil.isNotEmpty(encodingStr)){
            encoding = encodingStr ;
        }
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        ((HttpServletRequest)servletRequest).setCharacterEncoding(encoding);
        filterChain.doFilter(servletRequest,servletResponse);

    }

    @Override
    public void destroy() {

    }
}

标签:encoding,void,Filter,Servlet24,Override,servletRequest,public
From: https://www.cnblogs.com/Ashen-/p/17065295.html

相关文章