Servlet中的过滤器和监听器
1.什么是过滤器?
Servlet规范中定义的一种特殊的组件,用来拦截容器的调用过程。容器收到请求之后,首先调用过滤器,然后再调用Servlet
2.生命周期:
1、servlet:servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新结束。
(1)、装入:启动服务器时加载Servlet的实例;
(2)、初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动。初始化工作有init()方法负责执行完成;
(3)、调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法;
(4)、销毁:停止服务器时调用destroy()方法。
2、filter:(一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行)
(1)、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
(2)、每一次请求时都只调用方法doFilter()进行处理;
(3)、停止服务器时调用destroy()方法。
3、listener:类似于servlet和filter
web.xml 的加载顺序是:context- param -> listener -> filter -> servlet
4、interceptor:以struts的拦截器为例,加载了struts.xml以后,初始化相应拦截器。当action请求来时调用intercept方法,服务器停止销毁interceptor。
3.过滤器的执行流程
Øweb.xml中注册过滤器
<!-- 过滤器 -->
<filter>
<filter-name>filter1</filter-name>
<filter-class>web.CommentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/comment</url-pattern>
</filter-mapping>
4.什么是监听器?
servlet规范中定义的一种特殊的组件,用来监听容器产生的事件并进行相应的处理。容器会为每个监听器只创建一个实例。
5.监听器的分类:
第一维度:
按照被监听的对象分:ServletRequest域 HttpSession域 ServletContext域
第二维度:
按照监听的内容分: 监听域对象的创建与销毁的 监听域对象的属性变化的
总结如图:
6.如何编写监听器呢?
a)编写一个监听器类去实现监听器接口
b)覆盖监听器的方法
c)需要在web.xml中进行配置---注册
7.过滤器和拦截器的区别与联系:
a)拦截器是基于java反射机制的,而过滤器是基于函数回调的。
b)过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
c)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
d)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
e)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次
成功的秘诀在于永不改变既定的目标
最新文章
- p2p音视频通信
- AJAX格式
- React Native 打包.jsx文件
- 关于语句#ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #endif 的说明
- 技术英文单词贴--S
- Unity3d之MonoBehaviour的可重写函数整理
- asp.net中HTML代码编码、解码与页面的重定向
- SQL语句执行顺寻
- Hadoop的调度器总结
- C#总结3
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
- 微信cookie内容
- NVelocity 实例
- 【剑指offer】旋转数组的最小值
- iOS-OC、Swift 混编之桥接文件
- Linux grep \t Tab 键失效
- AspectJ开发
- C#-1-2-C#基础
- innerHTML用法及错误:无法设置未定义或null引用的属性“innerHTML”解决
- Android——简易计算器(转)