Struts2的拦截器 - 图文 下载本文

</interceptors>

3.定义拦截器栈

将多个拦截器合并在一起组成一个拦截器栈(拦截器链),当一个拦截器栈被应用到一个 Action的时,必须先执行完拦截器堆栈中的每一个拦截器后,才进入Action的执行。

定义拦截器栈可以使用元素,拦截器栈是由多个拦截器组成的。定义拦截器栈的语法形式如下:

?????????其他拦截器 </interceptor-stack>

也可以在一个拦截器栈中包含另一个拦截器栈,例如下面的表示形式:

????更多拦截器 </interceptor-stack>

????

</interceptor-stack>

拦截器栈2中除了包含拦截器4与拦截器5,还包含了拦截器栈1,而拦截器栈1中又包含有3个拦截器,所以,拦截器栈2共包含有5个拦截器。

4.定义带参数的拦截器栈

系统为开发者提供了两个机会来为拦截器指定参数。

·定义拦截器时指定参数值:这种参数值为拦截器参数的默认值。

·使用拦截器时指定参数:这种参数是在使用该拦截器时动态分配的参数值。

下面是在配置拦截器栈时为拦截器指定参数,语法如下。

参数值1</param> 参数值2</paran>

6

???更多参数

</interceptor-ref>

????更多拦截器 </interceptor-stack>

也可以针对一个拦截器堆栈统一指定所有的参数:

参数值1</param> 参数值2</param> ????更多拦截器

</interceptor-stack>

5.引用拦截器或拦截器栈

定义好了一个拦截器就可以使用这个拦截器来拦截Action了! 在struts.xml文件中配置片段如下:

以下为使用拦截器

success.jsp</result> login.jsp</result>

七、为包(package)配置默认的拦截器

以前在struts.xml文件中配置一个包时,没有为包中的Action指定任何拦截器,则系统默认拦截器将会起作用。

通常情况下定义包时都会有如下的形式。

7

当继承了struts-default包时,也就继承了它的默认拦截器栈:defaultStack,如果在包中没有为Action指定拦截器时,则defaultStack将会默认地去拦截 Action。

一旦为包中的某个Action指定了某个拦截器,则默认的拦器栈将不会起作用。如果该包中的Action都还需要使用默认拦截器,就要手动配置默认拦截器栈。

元素,需要指定一个name属性,该name属性值必须是一个已经存在的拦截器(栈)的名字,表明了它是此包的默认拦截器(栈)。

配置文件中包的默认拦截器配置代码片段如下:

!定义一个拦截器 !定义一个拦截器栈

</interceptors>

个默认拦截器(栈)>

??

</package>

</struts>

一个包中只能配置一个默认拦截器。

如果需要把多个拦截器都配置为默认拦截器,可以把这些拦截器定义为一个拦截器栈,然后把这个栈配置为默认拦截器就可以达到目的。

为包(package)配置默认的拦截器(带参数的)

与在Action中使用普通拦截器一样,在配置默认拦截器时也可以为其指定参数, 在元素中使用子元素。

下面是在配置默认拦截器时为拦截器指定参数的示例:

8

</interceptors>

参数值1</param> 参数值2</param> ??

</default-interceptor-ref>

??

八、总结一下与拦截器相关的配置元素。

元素:用来定义拦截器。所有的拦截器与拦截器栈都在此元素下定义。可以包含两个子元素,

元素:用来定义拦截器,需要指定两个属性:name指定拦截器的名字, class指定拦截器的类。

元素:用来定义拦截器栈。

元素:用来引用其他拦截器或拦截器栈,它可以作为元素、元素的子元素。

元素:用来为拦截器指定参数,它可以做元素与元素的子元素。

九、Struts2的内置拦截器

Struts 2.0框架的大部工作,都是通过内建拦截器来实现的,比如解析请求参数、参数类型转换、将请求参数值赋值给Action的属性、数据校验等。

Struts 2.0框架中提供了大量的内建拦截器,这些拦截器都是以key-value键值对的形式配置在 struts-default.xml文件中,文件位置:

源文件位置:struts-2.0.14\\src\\core\\src\\main\\resources\\ struts-default.xml 包路径位置:struts2-core-2.0.14.jar\\struts-default.xml

代码如下(需要使用时再查阅):

9

10