servlet/filter/listener/interceptor区别与联系

来源:互联网 发布:adams测量结果数据导出 编辑:程序博客网 时间:2024/06/06 09:52

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

0 0
原创粉丝点击