Filter+Listener核心技术
第五章 Filter+Listener核心技术
5.1 Filter过滤器(重点)
5.1.1 基本概念
- Filter本意为”过滤“的含义,是JavaWeb的三大组件之一,三大组件为:Servlet、Filter、Listener。
- 过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件。
- 过滤器相当于浏览器与Web资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。
5.1.2 工作方式
5.1.3 使用方式
- 自定义类实现Filter接口并重写doFilter方法。
public class LoginFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException,ServletException { //TODO 处理逻辑,必须调用下面的方法 chain.doFilter(request,response); } }
- 在web.xml文件中配置过滤器。
<filter> <filter-name>LoginFilterfilter-name> <filter-class>com.lagou.LoginFilterfilter-class> filter> <filter-mapping> <filter-name>LoginFilterfilter-name> <url-pattern>/*url-pattern> filter-mapping>
5.1.4 Filter接口
(1)基本概念
- javax.servlet.Filter接口主要用于描述过滤器对象,可以对资源的请求和资源的响应操作进行筛选操作。
(2)常用的方法
5.1.5 FilterConfig接口
(1)基本概念
- javax.servlet.FilterConfig接口主要用于描述过滤器的配置信息。
(2)常用方法
5.1.6 多个过滤器的使用
- 如果有多个过滤器都满足过滤的条件,则容器依据映射的先后顺序来调用各个过滤器。
5.1.7 过滤器优点
- 实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的正常执行。
- 可以将多个相同处理逻辑的模块集中写在过滤器里面,可实现重复利用、也方便代码的维护。
5.2 Listener监听器(重点)
5.2.1 基本概念
- Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理。
- 容器产生的事件分类如下:
- 生命周期相关的事件。
- 属性状态相关的事件。
- 存值状态相关的事件。
- 底层原理是采用接口回调的方式实现。
5.2.2 基本分类
5.2.3 监听器详解
(1)ServletRequestListener监听器
- 在ServletRequest创建和关闭时都会通知ServletRequestListener监听器。
- 常用方法如下:
(2)ServletRequestAttributeListener监听器
- 向ServletRequest添加、删除或者替换一个属性的时候,将会通知ServletRequestAttributeListener监听器。
- 常用方法如下:
(3)HttpSessionListener监听器
- 当一个HttpSession刚被创建或者失效(invalidate)的时候,将会通知HttpSessionListener监听器。
- 常用方法如下:
(4)HttpSessionAttributeListener监听器
- HttpSession中添加、删除或者替换一个属性的时候,将会通知HttpSessionAttributeListener监听器。
- 常用方法如下:
(5)ServletContextListener监听器
- 在ServletContext创建和关闭时都会通知ServletContextListener监听器。
- 常用方法如下:
(6)ServletContextAttributeListener监听器
- 向ServletContext添加、删除或者替换一个属性的时候,将会通知
- ServletContextAttributesListener监听器
- 常用方法如下:
(7)HttpSessionBindingListener监听器
- HttpSession中绑定和解除绑定时,将会通知HttpSessionListener监听器。
- 常用方法如下:
(8)HttpSessionActivationListener监听器
- 当有session数值的钝化和活化操作时,将会通知HttpSessionActivationListener监听器。
- 常用方法如下:
- 配置context.xml文件的方式如下:
-
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true"> <Store className="org.apache.catalina.session.FileStore" directory="C:\session"/> Manager>
5.2.4 实战案例
- 自定义类实现监听器接口并重写相关的方法。
public class OnlineUser implements HttpSessionListener,ServletContextListener { ServletContext ctx = null; // 初始化ServletContext public void contextInitialized(ServletContextEvent e) { ctx = e.getServletContext(); } // 销毁ServletContext public void contextDestroyed(ServletContextEvent e) { //将ServletContext设置成null; } // 当新创建一个HttpSession对象时 public void sessionCreated(HttpSessionEvent e) { //将当前的在线人数加上1,并且保存到ServletContext(application)中 } // 当一个HttpSession被销毁时(过期或者调用了invalidate()方法) public void sessionDestroyed(HttpSessionEvent e) { //将当前人数减去1,并且保存到ServletContext(application)中 } }
- 在web.xml中配置监听器
<listener> <listener-class> com.lagou.listener.OnlineUser listener-class> listener>