过滤监听器
# 过滤器 filter
过滤器是对web资源进行拦截,做⼀些处理后再交给下⼀个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理
# 应用步骤
添加
servlet
jar依赖包创建对象类 应用
javax.servlet.Filter接口
,并重写里面所有方法配置 url 的访问入口,有两种方式
web.xml
/@WebFilter
web.xml
文件配置<filter> <filter-name>过滤器映射名</filter-name> <filter-class>类路径</filter-class> </filter> <filter-mapping> <filter-name>过滤器映射名</filter-name> <url-pattern>请求url</url-pattern> </filter-mapping>
@WebFilter
注解配置@WebFiler("...") public class MyFilter implements Filter {...}
自定义过滤 约束 配置
回调servlet/转接过滤器 ,在
doFileter()
添加以下代码filterChain.doFilter(Request , Response);
# 过滤器注解说明
@WebFilter
注解配置
属性 | 值 [默认值] | 说明 |
---|---|---|
description | String [""] | 描述 |
displayName | String [""] | 显示名称 |
initParams | WebInitParam[] [{}] | 初始化参数 |
filterName | String [""] | 过滤器名称 |
value | String[] [{}] | 过滤地址url |
urlPatterns | String[] [{}] | 网址模式 |
dispatcherTypes | DispatcherType[] [REQUEST] | 拦截形式 |
asyncSupported | Boolean [false] | 异步支持 |
拦截形式 | 说明 |
---|---|
FORWARD | 转发访问资源 |
INCLUDE | 包含访问资源 |
REQUEST | 请求资源 |
ASYNC | 异步访问资源 |
ERROR | 错误跳转资源 |
# 过滤器执行过程
- 客户端发出Web请求,如果 过滤器与此地址匹配,则会优先进入过滤器
- 请求会进入到 doFilter()方法,进行代码逻辑处理
- 调用 chain.doFilter()方法 放行请求,否则会拦截请求
- 请求通过后,响应回来依旧需要经过 过滤器
注意:
- 过滤器执行是同步的,因此 chain.doFilter()方法 之前是 请求处理的范围 ,则之后为 响应处理的范围
- 如果过滤器有多个,会依次执行所有匹配url的过滤器才能获取Web资源
# 过滤器声明周期
init()
:在服务器启动后,会创建 Filter对象 ,然后 调用 init()方法 ,只会执行一次doFilter()
:每次请求地址匹配都会拦截请求destroy()
:在服务器关闭后,Filter对象被销毁 ,然后执行 destroy()方法 (前提需要在正常关闭情况下
注意: init() / destroy() 方法 一般用于 初次加载/释放资源 的情况
# 应用场景
- 防止用户未登陆访问资源
- 设置统一编码类型
- 加密、解密
- 过滤非法文字
- 下载资源的限制
- ...
# 监听器 Listener
监听器是监听某个域对象的的状态变化的组件
事件源对象:request
、 session
、servletContext
监听状态: 创建、变化、销毁
配置监听: 绑定与事件源的监听
监听响应: 监听状态发生变化进行响应
监听器类型
接口 | ServletContext | HttpSession | ServletRequest |
---|---|---|---|
监听对象 创建/销毁 | ServletContextListener | HttpSessionListener | ServlerRequestListener |
监听对象属性变化 | ServletContextAttributeListener | HttpSessionAttributeListener | ServletRequestAttributeListener |
对象周期和用意
- ServletContext: 服务器启动 -> 服务器关闭 初始化对象、初始化数据(配置加载等信息)
- Session:
request.getSession
创建 -> 服务器关闭、超时销毁、手动销毁 数据存取重要信息、网站记录数器 等。。。- Request: 请求开始 -> 请求结束 信息交互的存取
应用步骤:
添加
servlet
jar依赖包创建对象类 应用 监听的接口 并重写事件处理的方法
配置
web.xml
文件/添加注释@WebListener
(以下配置用于监听器使用)<listener> <listener-class>类路径</listener-class> </listener>
# 应用测试
上次更新: 2023/03/12, 00:43:49