过滤器Filter

本文介绍了Java Web中的过滤器Filter的概念,包括其在用户访问资源前后的拦截处理,如登录验证和乱码解决。同时阐述了过滤器的生命周期,如init()、doFilter()和destroy()方法的使用。开发过滤器涉及实现Filter接口并配置web.xml,一个过滤器可拦截多个资源,反之一个资源也可被多个过滤器拦截。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

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()

四、过滤器的生命周期(了解)

  1. 当服务器启动时,web应用加载后立即创建出当前web应用中的所有的Filter对象  
  2. 创建出来后,立即调用init方法进行初始化出操作.
  3.  从此以后这个Filter对象一直驻留在内存为后续所拦截的请求服务,
  4. 每次过滤到对资源的访问时,都会执行doFilter这个方法进行拦截处理
  5. 直到服务器关闭或者web应用移出容器为止,随着web应用的销毁,过滤器也跟着销毁,在销毁之前会调用destroy方法执行善后的处理.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值