1.过滤器
(1)什么是过滤器?
Servlet规范当中定义的一种特殊的组件,用于拦截Servlet容器的调用过程。
注:
当Servlet容器收到请求之后,会先调用过滤器,再调用后续的web组件。
(2)如何写一个过滤器?
step1. 写一个java类,实现Filter接口。
step2. 在接口方法当中,实现拦截处理逻辑。
step3. 配置过滤器(web.xml)。
(3)过滤器的优先级
当有多个过滤器都满足拦截的要求,则容器会依据<filter-mapping>配置的先后顺序来调用。
(4)初始化参数
step1.配置初始化参数
<init-param>
<param-name>illegal</param-name>
<param-value>猫</param-value>
</init-param>
step2.使用FilterConfig提供的方法来读取
String illegal =
config.getInitParameter("illegal");
2.监听器
(1)什么是监听器?
servlet规范当中定义的一种特殊的组件,用于监听容器产生的事件并进行相应的处理。
注:容器会产生两大类事件
a.生命周期相关的事件:
容器创建了或者销毁了request、session、Servlet上下文时产生的事件。
b.绑订数据相关的事件:
调用了request、session、Servlet上下文的setAttribute、removeAttribute方法时产生的事件。
(2)Servlet上下文
1)什么是Servlet上下文?
容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext接口要求的对象,该对象一般称之为Servlet上下文。
特点:
a.唯一性:一个web应用对应一个Servlet上下文。
b.持久性: 除非容器关闭(或者应用被卸载),否则Servlet上下文会一直存在。
2)如何获得Servlet上下文?
GenericServlet、ServletConfig、HttpSession及FilterConfig都提供了一个方法(getServletContext)
来获得上下文。
3)绑订数据
request、session、Servlet上下文都提供了绑订数据相关的方法,区别如下:
a.绑订到这三个对象上的数据的生存时间是不一样的。
request < session < Servlet上下文。
注:
在满足使用条件的情况下,优先使用生命周期短的。
b.绑订到session对象上的数据只有与之对应的用户能够访问到。而绑订到Servlet上下文上的数据,所有用户都能访问到。
4)读取全局的初始化参数
step1.配置全局的初始化参数
<context-param>
<param-name>company</param-name>
<param-value>IBM</param-value>
</context-param>
step2.读取
String company =
sctx.getInitParameter("company");
(3)如何写一个监听器?
step1. 写一个java类,实现相应的监听器接口。
注:要看监听的事件类型来选择实现相应的接口。比如,要监听session对象的创建和销毁,需要实现HttpSessionListener接口。
step2. 在接口方法当中,实现监听处理逻辑。
step3. 配置监听器。
统计在线人数
过滤器的优点
a. 在不修改原有代码的基础上,为程序增加一些简单的功能:
在原有功能处理之前、之后做一些处理。
b. 可以将多个模块相同的功能集中写在一个类里面(即过滤器里面),
方便代码的维护。