1. 过滤器
1.1 过滤器简介
过滤器(Filter)能够对 Servlet 容器传给 Web 组件的 ServletRequest 对象和 ServletResponse 对象进行检查和修改,它能提供如下过滤功能:
- 能够在 Web 组件被调用前检查 ServletRequest 对象,修改请求头和请求正文,或者对请求进行预处理操作
- 能够在 Web 组件被调用后检查 ServletResponse 对象,修改响应头或响应正文
其中,Web 组件可以是 Servet、JSP、HTML 文件。
过滤器的工作原理图如下所示:
其中,过滤器可以被串联在一起,协同为 Web 组件过滤请求和响应对象。
1.2 创建过滤器
所有自定义的过滤器类都需要实现 javax.servlet.Filter 接口。该接口内含 3 个过滤器必须实现的方法:
init(FilterConfig config)
filter 的创建和销毁都是由服务器负责的。服务器启动的时候,web 服务器创建 Filter 的实例对象,并调用其init 方法完成对象的初始化功能。filter 对象只会创建一次,init 方法也只会执行一次。
doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
当客户端请求的 URL 与为过滤器映射的 URL 匹配时,Servlet 容器会先调用过滤器的 doFilter() 方法。FilterChain 参数用于访问后续过滤器或 web 组件。
destroy()
服务器关闭时,web 服务器销毁 Filter 的实例对象。该方法可以释放过滤器占用的资源。
1.3 发布过滤器
和 Servlet 一样,当创建一个过滤器后,需要到 web.xml 中进行配置。需要分别配置
<filter>
<filter-name>sysfilter</filter-name>
<filter-class>com.kc.filter.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sysfilter</filter-name>
<url-pattern>/sys/*</url-pattern> // 所有经过sys路径的请求都会被进行过滤
</filter-mapping>
2. 监听器
监听器在 GUI 编程中用的很多,但在 Web 应用中并非重点,这里只介绍最基本的使用。
监听器对应的接口众多,所以当我们要编写一个监听器前,必须要知道要实现哪个监听器接口。
实现的过程很简单,只需让自己编写的类继承所需的 监听器接口,并重写里面的方法即可。一旦有相应的事件发生,就会执行自己编写的监听器内的方法。
在编写完监听器后,也需要在 web.xml 中进行配置,它的配置相比起 servlet 和 filter 简单的多,只需要一行即可。
<listener>
<listener-class>com.kc.listener.OnlineCountListener</listener-class>
</listener>