Servlet Filter Listener加起来是Java Web三大组件

Filter工作流程

图片说明

作用

举个最实际的例子来说,就是用户没登录就不能访问一些页面。
这种需求可以用过滤器实现。

用法

//@WebFilter(filterName = "LoginFilter")
public class LoginFilter implements Filter { 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException { 
        //doFilter方法类似于放行。不调用这个方法就相当于被拦截在这里。 注意,响应会从doFilter那一行下面开始执行!
        chain.doFilter(request,response); 
    } 
}

之后要配置web.xml。注意也可以不配置filter-name,利用注解的方式去配置filtername。
<filter> 
    <filter-name>LoginFilter</filter-name> 
    <filter-class>xxxx</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>LoginFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>

Filter接口的其他方法

其实filter接口还有init和destroy这两个方法。
大体类似于servlet的init和destroy。

FilterConfig接口

图片说明
其实这部分和servlet也基本上是一样的。

多过滤器

图片说明
先后顺序是在配置文件中编写映射文件的顺序。

Listener

监听容器内发生的事件的接口
容器产生的事件分类如下:
生命周期相关的事件。
属性状态相关的事件。
存值状态相关的事件。
底层原理是采用接口回调的方式实现。

基本分类

图片说明

ServletRequestListener监听器

在ServletRequest创建和关闭时都会通知ServletRequestListener监听器。
常用方法如下:
图片说明

ServletRequestAttributeListener监听器

向ServletRequest添加、删除或者替换一个属性的时候,将会通知ServletRequestAttributeListener监听器。
常用方法如下:
图片说明

HttpSessionListener监听器

当一个HttpSession刚被创建或者失效(invalidate)的时候,将会通知HttpSessionListener监听器。
常用方法如下:
图片说明

HttpSessionAttributeListener监听器

HttpSession中添加、删除或者替换一个属性的时候,将会通知HttpSessionAttributeListener监听器。
常用方法如下:
图片说明

ServletContextListener监听器

在ServletContext创建和关闭时都会通知ServletContextListener监听器。
常用方法如下:
图片说明

ServletContextAttributeListener监听器

向ServletContext添加、删除或者替换一个属性的时候,将会通知ServletContextAttributesListener监听器
常用方法如下:
图片说明

HttpSessionBindingListener监听器

HttpSession中绑定和解除绑定时,将会通知HttpSessionListener监听器。
常用方法如下:
图片说明

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>