简单理解Struts2中拦截器与过滤器的区别及执行顺序
struts2体系结构图:
当接收到一个httprequest ,?
a)当外部的httpservletrequest到来时?
b)初始到了servlet容器 传递给一个标准的过滤器链?
c)FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy?
d)ActionProxy将会通过ConfigurationManager来查找配置struts.xml?
?????? i. 下一步将会 通过ActionInvocation来负责命令模式的实现(包括调用一些拦截Interceptor框架在调用action之前)?
?????? ii. Interceptor做一些拦截或者初始的工作?
e)一旦action返回,会查找相应的Result?
f)Result类型可以是 jsp或者freeMark 等?
g)这些组件和ActionMapper一起返回给请求的url(注意拦截器的执行顺序)?
h)响应的返回是通过我们在web.xml中配置的过滤器?
i)如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。?
?
?
1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
?
?
org.apache.struts2.dispatcher.FilterDispatcher的四个功能
?
确定用户是否具有JAAS指定的Role,否则不予执行。
font-size: 1em; border-bottom-color: black; border-bottom-width: 1pt; border-bottom-style: solid; border-left-color: black; border-left-width: 1pt; border-left-style: solid; padding-bottom: 0cm; background-color: transparent; padding-left: 5.4pt; width: 106.35pt; padding-right: 5.4pt; border-top-color: #d4d0c8; border-right-