博主名取自《小羊肖恩》中的小羊肖恩,名字为:肖恩,音译为Sean,自己取的姓:阿奇,为符合我们的阅读习惯,连起来组成为ArchieSean。博主目前大三在读,志在将博客打造成为个人线上笔记的技术栈,方便自己也方便他人。如博客中有任何错误,请各位指出,谢谢大家。
Filter、Listener、Servlet统称为web三大组件。本篇只讲述前二,对于servlet将另开一篇进行详细介绍。对于Listener只做了解。
Filter
概念
web过滤器:在浏览器进行资源访问时,过滤器器将浏览器的请求拦截下来,用于完成一些特殊的功能。
作用:一般用于一些通用的操作。例如:登录验证、统一编码处理等。
基本使用
Filter的使用三步:
- 创建一个类实现Filter接口
- 复写方法
- 配置拦截路径(两种配置方式xml和注解配置)
相关配置
配置拦截路径:
方式1:xml配置
之前写servlet的时候,用xml配置有过这样一段xml配置:
<servlet>
<servlet-name>名称</servlet-name>
<servlet-class>全类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>名称</servlet-name>
<url-pattern>访问目录</url-pattern>
</servlet-mapping>
而filter的xml配置,和这个完全一致:
<filter>
<filter-name>名称</filter-name>
<filter-class>全类名</filter-class>
</filter>
<filter-mapping>
<filter-name>名称</filter-name>
<url-pattern>/*</url-pattern> <!-- 这里的路径并不是访问路径,而是对于拦截的路径的设置,/* 表示拦截所有-->
</filter-mapping>
方式2:注解配置
@webFilter("拦截路径")
拦截流程
filter在拦截的时候,顺序如下:
- 执行拦截器
- 执行放行后的资源
- 执行放行语句下边的代码
生命周期
- init:在服务器启动后,会创建filter对象,调用init方法。只执行一次,用于加载资源。
- doFilter:每一次请求被拦截的资源时,该方法都会执行。
- destory:服务器关闭后,filter对象被销毁。服务器正常关闭,该方法会执行一次。用于释放资源。
过滤器链
如果有多个过滤器,执行顺序为:
例如:有三个过滤器,执行顺序如下:
- 过滤器1
- 过滤器2
- 过滤器3
- 资源执行
- 过滤器3
- 过滤器2
- 过滤器1
对于过滤器先后问题:
- 注解配置:
按照类名的字符串比较,小的先执行。 - xml配置:
<filter-mapping></fliter-mapping>
顺序执行(由上到下)
Listener
概念
事件监听机制三要素:事件,事件源,监听器
简单来说就是,就是将三要素绑定在一起,当事件触发的时候,执行监听器的内容。
基本使用
- 定义一个类,实现ServletContextListener接口
- 复写方法
- 配置
3.1 web.xml:
<listener>
<listener-class>全类名</listener-class>
</listener>
3.2 注解配置@WebListener
filter和Listeber就总结到这里,如有任何问题,可评论,将立即改正。