一、概念
1. 过滤器: 用户在访问某个资源之前或之后,对访问的请求或响应进行拦截,从而做一些处理
处理分为:
a. 控制是否允许访问 --eg:用户登录之后才能访问自己的订单
b. 在访问资源之前或之后做一些处理 , ---eg:全站乱码解决
2. 一个过滤器可以拦截多个资源 ; 一个资源也可以配置多个过滤器进行拦截 ;
二、开发过滤器
1. 开发过滤器的步骤
(1)写一个类实现Filter接口,并实现其中的方法doFilter()
(2)在web应用的web.xml中配置过滤器所要拦截的资源路径
<!-- filter setting --> <filter> <!-- 配置Filter的名字 --> <filter-name>FilterDemo1</filter-name> <!-- 配置Filter实体类的路径,FilterDemo1的权限定名 --> <filter-class>com.tedu.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <!-- 配置Filter的名字 --> <filter-name>FilterDemo1</filter-name> <!-- 配置拦截指定名字的Servlet --> <servlet-name>ServletDemo1</servlet-name> <servlet-name>ServletDemo2</servlet-name> <!-- 配置拦截指定路径的资源 <url-pattern>/ServletDemo1</url-pattern> <url-pattern>/ServletDemo2</url-pattern> <url-pattern>/*</url-pattern> --> </filter-mapping> |
三、过滤器的方法
1.init()
public void init(FilterConfig arg0)
-- 当Filter实例创建之后,服务器立即调用init方法 进行初始化的操作
2. doFilter()
1)-- 当过滤器拦截到 对资源的访问时,服务器会调用doFilter方法进行处理
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException . |
2) 参数 FilterChain chain
参数FilterChain代表多个过滤器组成的过滤器链对象. (1)一个资源可以配置多个过滤器进行拦截,多个过滤器执行的顺序是按照Filter在web.xml中对应的filter-mapping标签的先后配置顺序执行的.多个过滤器就组成了一条过滤器链. (2)当过滤器拦截到对资源的访问时,如果处理之后放行过滤器,即调用FilterChain中的doFilter方法来放行过滤器. 接着才可以执行后面的资源 (3)如果后面仍然是过滤器,则也需要在过滤器的doFilter方法中调用FilterChain.doFilter方法才可以放行过滤器,执行后面的资源. (4)如果后面没有过滤器,则访问对应的资源. 也就是说当所有的过滤器都调用了FilterChain的doFilter方法时,才可以放行所有的过滤器,才可以访问到对应的资源. |
3) destory()
-- 在Filter实例销毁之前,执行destroy方法进行善后的处理
public void destroy() |
四、过滤器的生命周期(了解)
|