Filter过滤器&Listener监听器的理解与使用

Filter过滤器

1. 什么是filter

filter本质上也是一个类,这个类需要实现java提供的filter规范,在方法中书写过滤的条件。filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行。

2. filter的执行流程

  1. 浏览器访问服务器资源
  2. 判断是否有过滤器与该资源相关联
  3. 过滤器1执行doFilter方法拦截请求
  4. 对浏览器请求服务器提交的信息进行过滤
  5. 过滤器1调用FilterChain放行,调用下一个过滤器
  6. 过滤器2执行doFilter方法拦截请求
  7. 对浏览器请求服务器提交的信息进行过滤,请求访问资源
  8. 资源发送响应给浏览器
  9. 过滤器2获取资源响应数据
  10. 过滤器1获取资源响应数据
  11. 将响应数据发送给浏览器

3. 多个filter的执行顺序

配置文件方式:如果多个filter对同一个资源进行了拦截,执行的顺序是配置文件的从上到下顺序。

注解方式:如果多个filter对同一个资源进行了拦截,执行的顺序是按照filter文件名的自然排序顺序执行。

4. filter的生命周期

从filter的出生到filter的死亡 有3个方法伴随:init() doFilter() destory()

  1. 当服务器启动的时候,过滤器就创建并初始化了,执行过滤器的init方法
  2. 每当一个请求的路径是满足过滤器的配置路径,那么就会执行一次过滤器的doFilter方法
  3. 当服务器停止的时候,销毁过滤器,执行过滤器的destory方法

5. filter的拦截方式

默认:filter只拦截浏览器过来的请求,不拦截服务器内部的请求。
如果想让filter拦截服务器内部的请求:
1:xml方式配置
在<filter-mapping>的标签中添加标签<dispatcher>FORWARD</dispatcher>
但是这种配置将filter默认的拦截方式给覆盖了,只会拦截服务器内部的请求,不会再拦截默认的浏览器请求了。
想让filter拦截服务器内部的请求又拦截浏览器过来的请求:
  <filter-mapping>
        <filter-name>MyFilter2</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>  配置拦截服务器内部请求
        <dispatcher>REQUEST</dispatcher>  配置拦截浏览器的请求
</filter-mapping>

2:注解方式配置
@WebFilter(dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
该注解配置既会拦截浏览器过来的请求,又会拦截服务器内部的请求。

Listener监听器

1. 什么是listener

listener本质上是一个类,实现了java的listener规范,可以监听其它对象(域对象)的状态变化,比如 ServletContext,HttpSession,ServletRequest的创建和销毁等。可以在某些动作前后增加处理,实现监控。

2. listener的使用场景

1.系统启动时初始化信息
ServletContextListenner用来监听ServletContext对象的创建和销毁的。当项目启动的时候,servletContext对象被创建,会调用ServletContextListenner的contextInitialized方法。所以我们可以在此方法中初始化项目需要的信息。(框架的配置文件)

2.统计在线人数
我们知道,每当一个用户访问项目的时候,都会创建一个session会话。所以当前session会话被创建,当前在线用户+1,每当session会话被销毁,当前在线用户-1。HttpSessionListener可以用来监听session对象的创建和销毁 的。所以可以在HttpSessionListener中的监听session对象创建和销毁的方法中控制在线人数的加减。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值