Struts2入门(6): Interceptor 拦截器体系
来源:互联网 发布:农友软件 编辑:程序博客网 时间:2024/06/04 19:59
Struts2 Interceptor 拦截器体系
- 拦截器体系是 struts2 的重要组成部分,可以将是 struts2 理解为一个空容器,其中大量的内建拦截器完成类该框架的大部分工作,如解析请求参数、类型转换、将请求参数封装为DTO(Data Transfer Object)、输入验校等,这些内建拦截器可以在 struts.xml 进行配置单独加载,如果将<package>的 extends 属性设置为 "struts-default",则该package会加载常用的默认内建拦截器;
- 在 struts1 中是没有拦截器体系的概念的,所有框架动作逻辑都写在核心控制器中,这样的实现其实带来框架的低灵活性和低拓展性;
以下是一些常用的比较重要的内建拦截器的说明:
完整的内建拦截器列表可以参见 http://struts.apache.org/download.cgi 下载的 document-zip 文档中查询到;
拦截器的使用
对于已存在的拦截器(包括内建拦截器和自定义拦截器),可以通过在 struts.xml 配置相应的拦截器来进行使用,如示例中显示声明使用“logger”,“timer”拦截器;
1
2
3
<struts>
4
<constant name="struts.devMode" value="true" />
5
6
<package name="default" extends="struts-default">
7
<action name="test" class="demo.TestAction" method="execute">
8
<!--显示声明使用内建拦截器-->
9
<interceptor-ref name="params"/>
10
<interceptor-ref name="timer" />
11
12
<result name="success">/test.jsp</result>
13
</action>
14
</package>
15
</struts>
配置拦截器参数(或覆盖内建拦截器参数)可以使用以下的语法:
1
<action>
2
<interceptor-ref name="拦截器名称">
3
<param name="参数名">参数值</param>
4
</interceptor-ref>
5
</action>
配置拦截器的执行顺序
struts 中的拦截器的执行顺序是按照在 struts.xml 中拦截器栈的顺序执行的,可以使用 <interceptor-ref name="defaultStack"> 来指代默认的拦截器栈;
如下示例:
1
<package name="default" extends="struts-default">
2
<action name="test" class=".....">
3
<!--执行默认的拦截器栈-->
4
<interceptor-ref name="defaultStack" />
5
<!--执行自定义的拦截器栈-->
6
<interceptor-ref name="my_interceptor1" />
7
<!--执行自定义拦截器栈-->
8
<interceptor-ref name="my_interceptor2" />
9
10
<result name="...">...</result>
11
</action>
以上的示例中,先执行系统默认的拦截器栈,再执行“my_interceptor1”,再执行“my_interceptor2”;
创建自定义拦截器
要实现一个自定义的拦截器,需要实现一个Interceptor接口,该接口如下,可以直接继承AbstractInterceptor基类来简便实现过程:
1
public interface Interceptor extends Serializable{
2
void destroy(); //销毁方法
3
void init(); //初始化方法
4
String intercept(ActionInvocation invocation) throws Exception; //拦截方法
5
}
以下示例实现一个简单的拦截器
1
import java.util.*;
2
import com.opensymphony.xwork2.ActionInvocation;
3
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
4
5
public class MyInterceptor extends AbstractInterceptor {
6
7
public String intercept(ActionInvocation invocation)throws Exception{
8
9
/* let us do some pre-processing */
10
String output = "Pre-Processing";
11
System.out.println(output);
12
13
/* let us call action or next interceptor */
14
String result = invocation.invoke();
15
16
/* let us do some post-processing */
17
output = "Post-Processing";
18
System.out.println(output);
19
20
return result;
21
}
22
}
在 struts.xml 中调用
1
<action>
2
<interceptor-ref name="MyInterceptor" />
3
</action>
阅读全文
0 0
- Struts2入门(6): Interceptor 拦截器体系
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- struts2 拦截器 interceptor
- struts2 拦截器 interceptor
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor)
- Struts2拦截器(Interceptor
- struts2 拦截器 interceptor
- Struts2拦截器(Interceptor)
- struts2 拦截器 interceptor
- struts2 拦截器 interceptor
- Scala sbt akka Eclipse 环境的配置
- 利用注解配置切面
- curses库的简单使用
- TL431常用电路
- Day48-Spring-02
- Struts2入门(6): Interceptor 拦截器体系
- POJ 2367 拓扑排序 解题报告
- 51Nod-1685-第K大区间2
- java基础——方法参数的值传递机制
- Java 发送邮箱简单实现
- HDU 6105 Gameia(树+博弈)
- Dubbo简单总结
- Python中的join函数用法
- Linux启动/停止/重启gitlab