欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java Web之过滤器(Filter)

程序员文章站 2022-05-23 08:36:47
...

过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法,当Filter被移除或服务器正常关闭时,会执行destroy方法

a、过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理

b、通常都是用来拦截request进行处理的

c、也可以对返回的response进行拦截处理

Java Web之过滤器(Filter)

创建Filter##

右键包名—>new ---->Filter

Java Web之过滤器(Filter)

采用注释,不用再web.xml中配置 

Java Web之过滤器(Filter)

@WebFilter(filterName = "CharsetFilter")
public class CharsetFilter implements Filter {
    public void destroy() {
        /*销毁时调用*/
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        /*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
        chain.doFilter(req, resp);//交给下一个过滤器或servlet处理
    }

    public void init(FilterConfig config) throws ServletException {
        /*初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/

    }

}

配置Filter

Java Web之过滤器(Filter)

  • urlPatterns

a、以指定资源匹配。例如"/index.jsp"

b、以目录匹配。例如"/servlet/*"

c、以后缀名匹配,例如"*.jsp"

d、通配符,拦截所有web资源。"/*"

  • initParams

配置初始化参数

initParams = {
        @WebInitParam(name = "key",value = "value")
}
  • dispatcherTypes 

 配置拦截的类型,可配置多个。默认为DispatcherType.REQUEST**

    FORWARD,//转发的
    INCLUDE,//包含在页面的
    REQUEST,//请求的
    ASYNC,//异步的
    ERROR;//出错的
 

dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}
@WebFilter(filterName = "CharsetFilter",
        urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/
        initParams = {
                @WebInitParam(name = "charset", value = "utf-8")/*这里可以放一些初始化的参数*/
        })
public class CharsetFilter implements Filter {
    private String filterName;
    private String charset;
    public void destroy() {
        /*销毁时调用*/
        System.out.println(filterName + "销毁");
    }
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        /*过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理*/
        System.out.println(filterName + "doFilter()");
        req.setCharacterEncoding(charset);
        resp.setCharacterEncoding(charset);
        chain.doFilter(req, resp);
    }
    public void init(FilterConfig config) throws ServletException {
        /*初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
        filterName = config.getFilterName();
        charset = config.getInitParameter("charset");
        System.out.println("过滤器名称:" + filterName);
        System.out.println("字符集编码:" + charset);
    }
}

 

Java Web之过滤器(Filter)
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关标签: JavaWeb