当我们访问一个资源的时候,这个资源可以是html页面,jsp页面,图片,mp4等资源,如果我们访问html之类时候,我们可以在html中写上过滤的代码,但是图片写不了代码,这就需要我们来实现Filter接口对访问路径进行过滤。
Filter是什么?
1.Filter过滤器是JavaWeb的三大组件之一(Servlet程序,Filter过滤器,Listener监听器)
2.Filter过滤器是JavaEE的规范,也就是接口。
3.Filter过滤器它的作用是拦截请求,过滤响应
注:Filter过滤器在浏览器访问目标资源前进行执行
Filter过滤器的使用步骤:
1.定义一个类实现Filter接口
2.重写doFilter()方法
3.到web.xml文件下配置Filter的拦截资源
创建类来实现Filter接口,重写Filter中的方法
一个简单的实现doFilter方法,httpServletRequest.getRequestDispatcher().forward()表示请求转发
FilterConfig
FilterConfig是Filter的配置文件类,包含了Filter的配置文件的信息。
作用:
1.获取filter-name ---------> filterConfig.getFilterName();
2.获取Filter中配置的init-param初始化参数 --------> filterConfig.getInitParameter(“key”);返回一个value值
3.获取ServletContext对象 -------> filterConfig.getServletContext();
FilterChain:过滤器链
过滤中的所有代码,在过滤特定请求的时候都会执行。
filterChain.doFilter()的作用
1.执行下一个Filter过滤器(如果有Filter)
2.执行目标资源(没有Filter)
多个Filter的执行顺序与它们在web.xml配置文件中的先后顺序有关。
多个Filter的特点:
1.都在同一个线程中执行(默认情况下)
2.多个Filter共同执行时,它们公用一个request域对象
Filter的拦截路径:
拦截路径就是指web.xml文件中filter-mapping中的url-pattern。
1.精确匹配:(指明文件的路径以及后缀名)
2.目录匹配:(在一个目录后面写上*)
比如上面图片中的url-patern写上"/source/"
3.后缀匹配:(比如.jpg) -----> 后缀匹配不能以“/”开头
另外,Filter只关心请求的地址是否匹配,不关心请求的资源是否存在。