Struts2的应用:自定制Interceptor拦截器
来源:互联网 发布:风中有朵雨做的云 知乎 编辑:程序博客网 时间:2024/05/03 02:23
Struts拦截器
使用过Struts2的开发人员都知道,Struts2的Action之所以如此强大(比如请求参数能够自动完成类型转换,并且填充到Action中的属性;Action中属性的一些验证),是因为在这个Action被调用之前(具体可以理解为Action.execute方法执行之前),有系列的拦截器为我们完成了很多任务。Struts2内置提供了10多种拦截器,常见的有Parameter拦截器、Validation拦截器和File Upload拦截器。虽然这些内置的拦截器可以满足我们绝大部分的项目需求,但是,需求是多变的,我们总会遇到我们要编写自定制拦截器来完成某个任务,下面讲讲怎么在Struts2中自定制拦截器,并附上具体的案例。
Struts拦截器的定制
Struts拦截器的定制需要我们自己的Struts拦截器实现Interceptor接口,Interceptor接口原型如下:
public interface Interceptor{
void init();
void destroy();
String intercept(ActionInvocation invocation) throws Exception;
}一个Interceptor的实现类,可能会拥有一些资源,比如说文件、链接等等。
init方法:负责初始化资源
destroy方法:在对象销毁之前调用,负责销毁占用的资源
intercept方法:完成一些具体的任务
参数ActionInvocation:这个参数主要包含了两个对象,被调动的Action实例和一个Result实例。
并不是所有的Interceptor实现都会拥有资源的,如果每次都要我们去实现init方法和destroy方法,也是很令人厌烦的,所以Struts2为我们提供了AbstractInterceptor抽象类,这个类的原型如下:
public abstract class AbstractInterceptor{
public void init() {}
public void destroy() {}
public abstract String intercept(ActionInvocation) throws Exception;
}继承这个类,我们只需要实现intercept方法,就省事了。
一个自己定制的intercor,应该如下:
public class MyInterceptor extends AbstractInterceptor{
//code declear your resource here...
//code getter and setter here..
public void init()
{
//code initial your resource here...
}
public void destroy()
{
//code release your resource here...
}
public String intercept(ActionInvocation invocation)
{
//code fufil your task
return invocation.invoke();
}
}需要注意的是,invocation.invoke()方法的调用会把当前ActionInvocation对象交给下一个Interceptor实例处理。
Struts拦截器的注册
拦截器定义好了,还需要在struts.xm文件进行注册,我们需要在包下即package元素下去注册拦截器
<package name="somepackage" namespace="/" extends="struts-default"><interceptor name="my" class="com.daniel.interceptor.MyInterceptor"/>
</package>一般对于name的命名是,如果你的类是xxxInterceptor,那么name命名就取用xxx
在interceptor元素下,可以配置param子元素,该子元素的属性有name,这个子元素可以将值注入到Interceptor的属性当中。
Struts拦截器实例
以下实例是通过拦截器为一个Action注入属性值。
拦截器MsgInjectionInterceptor
@SuppressWarnings("serial")public class MsgInjectionInterceptor extends AbstractInterceptor {/** * 拦截器属性,通过<param>可以为拦截器属性注入值 */private String msg;public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}@Overridepublic String intercept(ActionInvocation arg0) throws Exception {// TODO Auto-generated method stubAction action = (Action) arg0.getAction();try{MsgAction msgAction = (MsgAction) action;msgAction.setMsg(msg);}catch(ClassCastException e){e.printStackTrace();}return arg0.invoke();}}Action类
@SuppressWarnings("serial")public class MsgAction extends ActionSupport {private String msg;public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubSystem.out.println(msg);return super.execute();}}配置struts.xml
<package name="action" namespace="/" extends="struts-default"><interceptors><interceptor name="msgInjection" class="com.daniel.struts.interceptors.MsgInjectionInterceptor"><param name="msg">hello</param></interceptor><interceptor name="appendMsg" class="com.daniel.struts.interceptors.AppendMsgInterceptor"></interceptor></interceptors><action name="MsgAction" class="com.daniel.struts.action.MsgAction"><interceptor-ref name="msgInjection"></interceptor-ref><interceptor-ref name="appendMsg"></interceptor-ref><interceptor-ref name="basicStack"></interceptor-ref><result>/index.jsp</result></action></package>
- 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
- struts2 拦截器 interceptor
- eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed
- 常见系统的权限管理系统分析
- OCP-1Z0-051 第87题 日期函数
- C字符串处理函数
- POI通过读取Excel模板生成Excel文件
- Struts2的应用:自定制Interceptor拦截器
- 杀死占用端口的进程(windows 和 linux)
- android
- 总结:Js中可能用到的一些小方法
- linux下src.rpm安装mysql
- LINQ实现左连接及多条件连接方法
- eclipse运行时占用内存大
- MyEclipse 快捷键
- hello,我的博客