Filter&Listener
Filter接口:过滤器
作用:
当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能,如:登录验证、统一编码处理、敏感词过滤……
使用步骤:
- 定义一个java类,实现Filter接口
- 复写方法
- 配置拦截路径:通过
web,xml
或者@webFilter("路径")
web.xml配置:
<filter>
<filter-name>
虚拟目录
</filter-name>
<filter-class>
Filter接口实现类全类名
</filter-class>
</filter>
<filter-mapping>
<filter-name>
虚拟目录
</filter-name>
<!-- 拦截路径 -->
<url-pattern>
/*
</url-pattern>
</filter-mapping>
过滤器的生命周期:
init
:执行一次,加载资源doFilter
:执行多次,拦截资源后执行destroy
:执行一次,释放资源
过滤器的拦截路径配置:
拦截路径 | 实例 | 过滤器执行的情况 |
---|---|---|
具体资源路径 | /index.jsp | 访问index.jsp 资源时 |
拦截目录 | /user/* | 访问/user 下的所有资源时 |
后缀名拦截 | *.jps | 访问所有后缀名为.jsp 资源时 |
拦截所有资源 | /* | 访问所有资源时 |
过滤器的拦截方式配置(资源被访问的方式):
- 注解配置:
设置dispatcherTypes 属性 | 功能 |
---|---|
REQUEST | 默认值。浏览器直接访问请求资源 |
FORWARD | 转发访问资源 |
INCLUDE | 包含访问资源 |
ERROR | 错误跳转资源 |
ASYNC | 异步访问资源 |
web.xml
配置:设置<dispatcher></dispatcher>
标签即可
过滤器链(配置多个过滤器):
- 执行顺序:如果有两个过滤器,过滤器1和过滤器2
过滤器1 -> 过滤器2 -> 资源执行 ->过滤器2 -> 过滤器1
- 过滤器先后顺序问题:
- 注解配置:按照类名的字符串比较规则比较,值小的先执行
web.xml
配置:<filter-mapping>
谁定义在上边,谁先执行
Listener接口:监听器
概念:web的三大组件之一
事件监听机制:
- 事件:一件事情
- 事件源:事件发生的地方
- 监听器:一个对象
- 注册监听:将事件、事件源、监听器绑定在一起
ServletContextListener接口
作用:监听ServletContext
对象的创建和销毁
方法:
常用方法 | 功能描述 |
---|---|
void contextDestroyed(ServletContextEvent sce) | ServletContext对象被销毁之前会调用该方法 |
void contextInitialized(ServletContextEvent sce) | ServletContext对象创建后会调用该方法 |
使用步骤:
-
定义一个类,实现
ServletContextListener
接口 -
复写方法
-
配置:
web.xml
或者@WebListener
web.xml
配置:<listener> <listener-class> Listener接口实现类 </listener-class> </listener>