http://www.2cto.com/kf/201301/186681.html
1、 概念:
a) servlet:是一种运行在服务器端的java应用程序,独立于平台和协议,可以动态生成web页面,它位于客户端请求和服务器响应的中间。
b) filter:是一个可以复用的代码片段,用来转换HTTP请求、响应和头信息。filter不能产生请求和响应,只是修改对某一资源的请求,或者修改某一响应。
c) listener:监听web服务器中某个执行动作,并根据其要求作出响应。通俗的说就是在application,session,request三个对象创建,消亡或者往其中添加、修改或删除属性时自动执行代码的功能组件。
d) interceptor:面向切面编程的,在service或者方法前或者后调用一个方法,比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串或者做其他业务逻辑的操作
servlet/filter/listener是配置到web.xml中的,interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中,spring的拦截器配置到spring.xml中。
2、 生命周期
a) servlet:开始于被装入web服务器的内存,并在web服务器终止或重新装入servlet时结束。servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直到web服务器关闭或者重新启动。
i. 装入:启动服务器时加载servlet实例;
ii. 初始化:web服务器启动时或者web服务器接收到请求时,或者是两者之间的某个时刻,由init方法负责执行完成;
iii. 调用:从第一次到以后的多次访问,都只调用doGet()或doPost方法;
iv. 销毁:停止服务器时调用destroy方法;
b) filter:
i. 启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
ii. 每次请求时都只调用方法doFilter()进行处理;
iii. 停止服务器调用destroy方法
c) listener:类似于servlet和filter
i. web.xml的加载顺序是:context-paramàlisteneràfilteràservlet
d) interceptor:以struts为例,加载了struts.xml后,初始化相应拦截器,当action请求来时调用intercept方法,服务器停止销毁interceptor。
e)
3、 职责
a) servlet:
i. 创建并返回一个包含基于客户请求的动态内容的完整的html页面;
ii. 创建可嵌入到现有的html页面中的一部分html页面;
iii. 读取来自客户端发来的隐藏数据
iv. 读取来自客户端发来的x显示数据
v. 与其他服务器资源(包括数据库和java的应用程序)进行通信;
vi. 通过状态代码和响应头向客户端发送隐藏数据;
b) filter
i. 在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应;
c) listener:三类接口
i. 与servletContext有关的listener接口;
ii. 与httpsession有关的listener接口;
iii. 与servletRequest有关的listener接口;
d) interceptor:与过滤器类似,通过层层拦截,处理用户的请求和响应。
4、 区别
| 处理对象 | 流程 | 功能 |
servlet | URL | 短,处理完后返回或转向到某一自己知道的页面,流程结束 | 处理请求 |
filter | URL | 线性的,处理完后接着向下执行,执行下一个filter或servlet | 执行检查,替换 |
listener | 对象,如session的创建,session.setAttribute的发生 | 线性的 | Spring整合Struts,为Struts的action注入属性,web应用定时任务的实现,在线人数的统计等 |
interceptor | action | 线性的 | 当页面提交action时,进行过滤操作 |
5、 struts2中的过滤器和拦截器的区别和联系
| filter | interceptor |
调用机制 | java反射机制 | 函数回调 |
是否依赖servlet容器 | 是 | 否 |
操作对象 | 只能操作Action请求 | 对所有请求起作用 |
是否可访问action上下文、值栈里的对象 | 不可 | 可以 |
在生命周期中多次调用 | 一次初始化调用一次 | 多次调用 |
6、 执行流程
a) servlet
b) filter
c) listener
d) interceptor