您的位置:首页 > 其它

戏说Servlet,Filter,Listener,Interceptor

2012-03-23 10:43 344 查看
  以前在学习Servlet和Filter及Listener的时候就对三者的认识不是很清晰,现在又加了一个Interceptor,更加迷糊了,于是通过查询资料对四者有了一些认识。

  为了更好的认识它们,我们从以下几个方面来区分它们:

 

一.概念:

 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只能过滤请求。

 

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

  


   以上是我对这四者的一些拙见,希望来个抛砖引玉,有不对之处,望大家给予指导。

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