您的位置:首页 > 其它

Servlet,Filter,Listener,Interceptor

2015-06-03 22:35 423 查看
一.概念:

1.Servlet:

servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。

2.Filter:

filter流程是线性的,它就像是像一个职责链,url传来之后,进行预处理,然后传递给下一个filter继续执行,而servlet 处理之后,不会继续向下传递。

3.Listener:

如果说servlet和filter是查找url进行操作,则listener就是监听对象的动作进行触发操作,有点类似于我们数据库中的触发器。如在session的创建或更改时做一些事情。

4.Interceptor:

拦截器是动态拦截Action调用的对象。它提供了一种机制使得开发者可以定义action执行之前或之后执行的代码,也可以在一个action执行前阻止其执行。

二.作用对象:

1.针对url:

servlet,filter都是针对url进行的操作,这点我们通过它们的配置就可以看到,这两个在配置时都需要配置url-pattern。

2.针对对象:

listener是针对对象的操作,它是在某个对象发生某些动作的时候执行,所以listener是提前封装好的对特定的对象的操作,只需要声明名称和类的位置即可。

3.针对action:

interceptor是针对action对象进行操作的,它在配置的时候需要和action一起配置才能起作用,当页面提交action时,进行过滤操作。

三.作用范围:

1.Servlet:

servlet一般是针对特定的url进行操作的,所以它需要在jsp中指定servlet的地址才能跳转过去进行执行。

2.Filter:

filter一般是针对所有的url进行操作的,它是对所有url的一个公共的操作,所以filter是基于容器的操作,比如字符集过滤器等。

3.Listener:

listener的范围就是针对它所监听的对象的某个操作,但是在项目一启动就开始进行监听,直到那个动作发生才执行操作,有点类似于“守株待兔”。

4.Interceptor:

interceptor可以在Action的方法执行之前或者之后做一些处理。

interceptor类似于filter,也可以说成是针对xwork的filter,下面我们来看一下这两者的区别:

1)Filter基于回调函数,而Interceptor则基于java本身的反射机制,这是两者最本质的区别。

2)Filter依赖于servlet容器,而Interceptor与servlet容器无关(因为interceptor是XWork中引入的概念,所以它不是Servlet JSR中的概念,因此与servlet容器无关)。

3)Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。

对它们的区别有所了解后,我们来看一下它们的执行顺序:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: