分清servlet/filter/listener/interceptor过滤器、监听器、拦截器(三)

分清servlet/filter/listener/interceptor(一)
分清servlet/filter/listener/interceptor(二)
分清servlet/filter/listener/interceptor(三)
一、论述区别
1、servlet 流程是短的
url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制。或者自己本身就进行业务处理,最终要跳转到某个页面。类似实现MVC的controller功能。
2、filter 流程是线性的
url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。
filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。
3、listener是针对对象
servlet,filter都是针对url之类的,而listener是针对对象的操作的,如session的创建,session.setAttribute的发生,在这样的事件发生时做一些事情。
功能可用来实现:Spring整合Struts;为Struts的action注入属性;web应用定时任务的实现;在线人数的统计等;
4,interceptor 拦截器
它功能上类似于filter,不过在struts.xml中配置,不是在web.xml。并且不是针对URL的,而是针对action,当页面提交action时,进行过滤操作,相当于struts1.x提供的plug-in机制,可以看作,前者是struts1.x自带的filter,而interceptor 是struts2 提供的filter。
与filter不同点:
(1) 不在web.xml中配置,而是在struts.xml中完成配置,与action在一起
(2) 可由action自己指定用哪个interceptor 来在接收之前做事
5、struts2中的过滤器和拦截器的区别与联系
(1)、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
(2)、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
(3)、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
(4)、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
(5)、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次(感觉这个评述有点问题)。
* 执行流程图*
1、servlet
分清servlet/filter/listener/interceptor过滤器、监听器、拦截器(三)
2、filter
分清servlet/filter/listener/interceptor过滤器、监听器、拦截器(三)
分清servlet/filter/listener/interceptor过滤器、监听器、拦截器(三)
3、listener
分清servlet/filter/listener/interceptor过滤器、监听器、拦截器(三)
4、interceptor
分清servlet/filter/listener/interceptor过滤器、监听器、拦截器(三)