介绍
-
拦截器之所以称为拦截器,是因为他可以在Action执行前后拦截调用。
-
Struts 2 将它的核心功能放到拦截器中实现而不是分散到 Action 中实现, 有利于系统
的解耦, 使得功能的实现类似于个人电脑的组装, 变成了可插拔的。 需要某个功能就“ 插
入” 一个拦截器, 不需要某个功能就“ 拔出” 一个拦截器。 你可以任意组合拦截器来为
Action 提供附加的功能, 而不需要修改 Action 的代码。 -
在整个执行过程中, 任何一个拦截器都可以选择直接返回, 从而终止余下的拦截器、 Action 和 Result 的执行。 例如, 当一个未授权的用户访问受保护的资源时,执行身份验证的拦截器可以直接返回。
Struts2自带的拦截器(来自Struts2深入浅出)
如果为Action指定了一个拦截器,则系统默认的拦截器栈将会失去作用,导致Struts2无法正常运行,为了继续使用默认拦截器,所以需在配置文件中手动引入了默认拦截器。
拦截器栈
<interceptor-stack>
用于定义一个拦截器栈
- 由于拦截器较多,为了使用和管理的方便,可将多个拦截器组织在一起形成一个拦截器栈,使用拦截器栈可以将多个拦截器作为一个整体来引用。
在<interceptor-stack>内使用<interceptor-ref name="拦截器名"/>来引用拦截器
- 一旦定义了拦截器和拦截栈后,就可以使用这个拦截器或拦截器栈拦截Action,通过
<interceptor-ref name="拦截器名"/>
可以在Action内使用拦截器
在/struts-default.xml还有很多拦截器栈
拦截器引用
当配置一个包时,可以指定默认拦截器。
<default-interceptor-ref name=“拦截器/拦截栈名字"/>
<default-interceptor-ref…/>元素作为<package…/>元素的子元素使用,为该包下的所有Action配置默认的拦截器。
每个<package…/>元素只能有一个<default-interceptor-ref…/>子元素,也就是每个包只能指定一个默认拦截器
只有当Action中没有显示应用拦截器时,该Action所在包的默认拦截器才会生效;如果为Action指定了一个拦截器,则系统默认的拦截器栈将会失去作用,导致Struts2无法正常运行,为了继续使用默认拦截器,所以需在配置文件中手动引入了默认拦截器。