1. 过滤器

1.1 过滤器简介

过滤器(Filter)能够对 Servlet 容器传给 Web 组件的 ServletRequest 对象和 ServletResponse 对象进行检查和修改,它能提供如下过滤功能:

  1. 能够在 Web 组件被调用前检查 ServletRequest 对象,修改请求头和请求正文,或者对请求进行预处理操作
  2. 能够在 Web 组件被调用后检查 ServletResponse 对象,修改响应头或响应正文

其中,Web 组件可以是 Servet、JSP、HTML 文件。

过滤器的工作原理图如下所示:
截屏2021-07-25 下午7.47.36.png其中,过滤器可以被串联在一起,协同为 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 中进行配置。需要分别配置 元素和 元素。以下是举例:

  1. <filter>
  2. <filter-name>sysfilter</filter-name>
  3. <filter-class>com.kc.filter.SysFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>sysfilter</filter-name>
  7. <url-pattern>/sys/*</url-pattern> // 所有经过sys路径的请求都会被进行过滤
  8. </filter-mapping>

2. 监听器

监听器在 GUI 编程中用的很多,但在 Web 应用中并非重点,这里只介绍最基本的使用。

监听器对应的接口众多,所以当我们要编写一个监听器前,必须要知道要实现哪个监听器接口。

实现的过程很简单,只需让自己编写的类继承所需的 监听器接口,并重写里面的方法即可。一旦有相应的事件发生,就会执行自己编写的监听器内的方法。

在编写完监听器后,也需要在 web.xml 中进行配置,它的配置相比起 servlet 和 filter 简单的多,只需要一行即可。

  1. <listener>
  2. <listener-class>com.kc.listener.OnlineCountListener</listener-class>
  3. </listener>