[web]Servlet中的Listener和Filter
建议先看看 ——> Servlet工作原理
一、Listener
在Tomcat服务中,Listener的设计是基于观察者模式的,目前在Servlet中提供6中两类事件的观察者接口,它们分别是:
实际上这六个Listener都继承了EvenListener,每个Listener由分别定义了自己需要实现的接口:
ServletContextAttributeListener:
public interface ServletContextAttributeListener extends EventListener {
// 设置属性时
public default void attributeAdded(ServletContextAttributeEvent scae) {
}
// 删除属性时
public default void attributeRemoved(ServletContextAttributeEvent scae) {
}
// 、更改属性时
public default void attributeReplaced(ServletContextAttributeEvent scae) {
}
}
ServletRequestAttributeListener:
public interface ServletRequestAttributeListener extends EventListener {
// 更改Request属性时
public default void attributeAdded(ServletRequestAttributeEvent srae) {
}
// 更改Request属性时
public default void attributeRemoved(ServletRequestAttributeEvent srae) {
}
// 更改Request属性时
public default void attributeReplaced(ServletRequestAttributeEvent srae) {
}
}
HttpSessionAttributeListener:
public interface HttpSessionAttributeListener extends EventListener {
// 添加 Session 属性时
public default void attributeAdded(HttpSessionBindingEvent se) {
}
// 删除 Session 属性时
public default void attributeRemoved(HttpSessionBindingEvent se) {
}
// 更改 Session 属性时
public default void attributeReplaced(HttpSessionBindingEvent se) {
}
}
ServletRequestAttributeListener:
public interface ServletRequestAttributeListener extends EventListener {
public default void attributeAdded(ServletRequestAttributeEvent srae) {
}
public default void attributeRemoved(ServletRequestAttributeEvent srae) {
}
public default void attributeReplaced(ServletRequestAttributeEvent srae) {
}
}
ServletContextListener:
public interface ServletContextListener extends EventListener {
// StandardConetxt 创建时
public default void contextInitialized(ServletContextEvent sce) {
}
// StandardConetxt 销毁时
public default void contextDestroyed(ServletContextEvent sce) {
}
}
HttpSessionListener:
public interface HttpSessionListener extends EventListener {
public default void sessionCreated(HttpSessionEvent se) {
}
public default void sessionDestroyed(HttpSessionEvent se) {
}
}
二、Filter
Filter可以完成和Servlet同样的工作,除了request和response两个对象外,它还提供了一个FilterChain对象,它可以帮助我们更加灵活地控制请求的流程,该接口定义如下:
Filter:
public interface Filter {
// 初始化接口,在用户定义的Filter初始化时被调用,它与Servlet的init方法是一样的,
// FilterConfig也和ServletConfig类似,除了可以获取ServletContext之外,还可以在配置文件中声明参数
public default void init(FilterConfig filterConfig) throws ServletException {}
// 每个用户的匹配请求进来时,这个方法都被调用,并且是在Servlet的service方法之前被调用,
// 而 FilterChain代表了当前的整个请求链,通过调用FilterChain.doFilter可以将请求继续传递下去,
// 如果需要拦截该请求,那么就不调用FilterChain,就可以直接返回了,所以它是一种责任链模式
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
// Filter被销毁时,会调用这个方法,web容器调用这个方法之后,容器会再调用一次doFilter方法
public default void destroy() {}
}

除此之外还有两个接口的定义,分别FilterConfig 和FilterChain
FilterConfig:
public interface FilterConfig {
/**
* Get the name of the filter.
*
*/
public String getFilterName();
/**
* Returns a reference to the {@link ServletContext} in which the caller is
* executing.
*
*/
public ServletContext getServletContext();
/**
* Returns a <code>String</code> containing the value of the named
* initialization parameter, or <code>null</code> if the parameter does not
* exist.
*
*/
public String getInitParameter(String name);
/**
* Returns the names of the filter's initialization parameters as an
*/
public Enumeration<String> getInitParameterNames();
}
FilterChain:
public interface FilterChain {
/**
* Causes the next filter in the chain to be invoked, or if the calling
* filter is the last filter in the chain, causes the resource at the end of
* the chain to be invoked.
*
*/
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException;
}
三、<url-pattern>匹配规则
- 精确匹配:如/foo/.html,只能匹配/foo.html
- 路径匹配:如/foo/*,将匹配/foo/路径下所有的URL
- 后缀匹配:如*.html,将匹配所有所有的后缀为.html的路径
匹配的顺序也是:精确匹配——> 最长路径匹配——>后缀匹配
[web]Servlet中的Listener和Filter的更多相关文章
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- web.xml 中的listener、 filter、servlet 加载顺序
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- web.xml 中的listener、filter、servlet 加载顺序及其【配置详解】
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- 转:web.xml 中的listener、 filter、servlet 加载顺序及其详解
在项目中总会遇到一些关于加载的优先级问题,刚刚就遇到了一个问题,由于项目中使用了quartz任务调度,quartz在web.xml中是使用listener进行监听的,使得在tomcat启动的时候能马上 ...
- web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- [Java][Web] Servlet中转发和重定向比较
Servlet中页面跳转的两种方式 请求转发 使用requestDispatcher对象 request.getRequestDispatcher("path").forward( ...
- web.xml中自定义Listener
Listener可以监听容器中某一执行动作,并根据其要求做出相应的响应. 常用的Web事件的监听接口如下: ServletContextListener:用于监听Web的启动及关闭 ServletCo ...
- Java Web servlet中的cookie
点击submit后: 点击查看Cookies: 在C:\Documents and Settings\Administrator\Cookies目录下面会有一个 hongten@webproj ...
- 一个web项目中web.xml<context-param>的作用
转 <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置 ...
随机推荐
- labelme2COCO
# -*- coding:utf-8 -*-# !/usr/bin/env python import argparseimport jsonimport matplotlib.pyplot as p ...
- JVM内存区域解析
引言 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间.有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的 ...
- code1796 社交网络
输入描述 Input Description 输入文件中第一行有两个整数,n 和 m,表示社交网络中结点和无向边的数 目.在无向图中,我们将所有结点从 1 到 n 进行编号. 接下来 m 行,每行用三 ...
- code1316 文化之旅
文化之旅的本质是最短路问题,只不过添加了一个文化排斥,仅需要做最短路时判断一下是否排斥即可 因为数据较小,采用了Floyd算法,以下是代码,关键部分附注释: #include<iostream& ...
- array_column()
array_column($arr,value) 返回输入数组中某个单一列的值. array_column($arr,value,key) 返回输入数组中某个单一列的值,value是值,key是键.
- 实践作业3:白盒测试----junit的难点DAY11.
本次白盒测试 需要独立完成整个项目和工具的配置安装运行操作,并编写.运行测试脚本,并完成实验的一些小细节等等. 首先,导入Junit测试框架所需的Jar包 然后编写测试脚本,为.java运行程序,见打 ...
- linux系统学习(二)
文件,目录 pwd:查看当前目录 Print Working Directory cd,ls(ll),mkdir -p Change Directory List Make Directory du ...
- 支持stl容器的gdb自定义命令
# 本文可以从https://sourceware.org/ml/gdb/2008-02/msg00064/stl-views.gdb直接下载 # 有关gdb的高级使用,请浏览:http://blog ...
- Android开发之Tween(补间动画)
在android中动画主要有三种,①帧动画(http://blog.csdn.net/dmk877/article/details/45893017)这篇文章已经详细的进行了讲解,②补间动画这也是这篇 ...
- MongoDb安全配置:简单的身份认证
mongod默认启动不加任何参数时,是没有身份认证的,任何人都可以登录上进行任何操作 启动时添加--auth可以使用身份验证模式 使用mongod -f mongod.conf配置文件启动时,配置文件 ...