servlet、listener、filter、Interceptor

概念上:

 servlet:是运行于服务端的java程序,可生成动态的web页面。接受请求、产生响应页面和数据。

filter:用于对请求或者相应进行预处理和后处理。它与Servlet的区别在于:它不能直接向用户生成响应。使用方式:实现了Filter接口的类,web.xml中配置。

listener:监听,比如监听web服务器中的某次执行动作,并作出响应。在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。比如Spring的总监听器,服务启动时加载bean,主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。


interceptor:拦截器,面向切面的(难道在struts中也是用的AOP实现的么?)


servlet、filter、listener是配置到web.xml中(web.xml 的加载顺序是:context-param -> listener -> filter -> servlet ),interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。 


一些区别:


  1. filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。
  2. servlet、filter是针对url的,而listener是针对对象的(比如为struts的action注入属性)。
  3. interceptor功能上类似filter,但是不是基于url的,是基于action的,当页面提交action时,进行过滤操作。

与filter不同点:(1)不在web.xml中配置,而是在struts.xml中完成配置,与action在一起
                            ( 2  ) 可由action自己指定用哪个interceptor 来在接收之前做事
   


 

 另外,

struts2中的过滤器和拦截器的区别与联系:

 

      (1)、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
      (2)、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
      (3)、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
      (4)、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
      (5)、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

补充说明:(1)拦截器基于java反射,通过xml配置时,通过类名加载bean。还有一说,拦截器基于动态代理,那么动态代理也可以理解为基于反射。

                   过滤器基于函数回调:过滤器调用有一个filterChain,看这里http://www.cnblogs.com/LBSer/p/4853234.html的评论区,说的很好。就是说,基于接口的方法调用,其实就是java里面的回调。

                  (2)


这里有一份springMVC里面的拦截器和filter的区别:

就是说,filter是在servlet规范中的,被限定在servlet的前后起作用,而拦截器,在spring中是一个spring组件,因此可以使用spring里面的任何资源和对象。从这里我们也可以类比struts中的拦截器一些相似的特性。比如类似上面的第4点特性。


对第3点的疑问,除了acton类型,还有哪些其他类型请求?

 

对第5点,完全不懂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章