> 文档中心 > 【JavaWeb】过滤器的了解与应用

【JavaWeb】过滤器的了解与应用


注:本文章基于尚硅谷JavaWeb相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者!

文章目录

  • 一、初识过滤器
  • 二、Filter的生命周期
  • 三、FilterChain过滤器链

一、初识过滤器

Filter过滤器是JavaWeb的三大组件之一,三大组件分别是:Servlet程序、LIstener监听器、Filter过滤器;

Filter过滤器是JavaEE的规范,也就是接口;
Filter过滤器它的作用是:拦截请求,过滤响应;

  1. 编写一个过滤器类继承Filter类
  2. 实现过滤方法都Filter()
  3. 在doFilter方法中拦截请求,可以作权限检查
  4. 可以在web.xml中或者直接使用@WebFilter注解进行拦截路径的设置;
WebFilter("/*")public class Filter1 implements Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {     }     @Override    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest) req; HttpServletResponse response=(HttpServletResponse) resp;if(user=null){//转发servletRequest.getRequestDispatcher("/login.jsp").forward(request,response)return;}else{//放行 chain.doFilter(request,response);    }     @Override    public void destroy() {     }}

二、Filter的生命周期

FIlter的生命周期包含的几个方法:

  1. 构造器方法
  2. Init初始化方法
    第1,2步在web项目启动的时候执行(Filter已创建)
  3. doFilter过滤方法
    每次拦截到请求,就会执行
  4. destory销毁
    停止web工程的时候,就会执行,也会销毁Filter过滤器

FilterConfig类:

FilterConfig类是Filter过滤器的配置文件类。
Tomcat每次创建Filter的时候,也会同时创建一个FilterConfig类,这里包含了FIlter配置文件的配置信息;

FilterConfig类的作用是获取filter过滤器的配置内容:

  1. 获取Filter的名称filter-name的内容
//在init初始化方法中:filterConfig.getFilterName()
  1. 获取web.xmlr中配置的init-param初始化参数
filterConfig.getInitParameter(web.xml中的init-name名称)
  1. 获取ServletContext对象
filterConfig.getServletContext()

三、FilterChain过滤器链

FilterChain,就是过滤器链(多个过滤器链如何一起工作)
FilterChain.doFilter()方法的作用:

  1. 执行下一个Filter过滤器(如果有Filter过滤器)
  2. 执行目标资源(如果没有Filter)

在多个Filter过滤器执行的时候,他们的执行顺序是按他们在web.xml文件中从上到下的配置的顺序来决定的;

多个Filter过滤器执行的特点:

1. 所有的FIlter和目标资源默认都执行在同一线程中
2. 多个Filter共同执行的时候,它们都使用同一个Request对象

Filter的拦截路径:

  • 精确匹配
    /target.jsp
    以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp

  • 目录匹配
    /admin/*
    以上配置的路径,表示请求的地址必须为http:ip/port/工程路径/admin/*

  • 后缀名匹配
    *.html
    以上配置的路径,表示请求地址必须以.html结尾才能拦截到

注意:Filter只关心请求的地址是否匹配,而不关心请求的资源是否存在;


如果感觉内容写的还不错的话,一键三连不迷路!!!!
后面将会更新更多学习内容,一起学习吧!!!!!!
在这里插入图片描述