struts2拦截器
2016-05-27 14:52
483 查看
struts2拦截器
拦截器是Struts2的核心组成部分1.Struts2很多功能都是构建在拦截器基础之上的,例如文件的上传和下载,国际化,数据类型转换和数据校验等等。
2.Struts2拦截器在访问某个Action方法之前或之后实施拦截
3.Struts2拦截器是可插拔的,拦截器是AOP(面向切面编程)的一种实现
4.拦截器栈(Interceptor-Stack):将拦截器按一定的顺序联结成一条链,在访问被拦截的方法时,Struts2拦截器链中的拦截器就会按其之前定义的顺序依次调用。
Interceptor接口
每个拦截器都是实现了com.opensympnony.xwork2.interceptor.Interceptor接口的java类:
public interface Interceptor extends Serializable{
void destory();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
--inti:该方法将在拦截器被创建后立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相对资源进行必要的初始化
--intercept:每拦截一个请求,该方法就会被调用一次
--destory:该方法将在拦截器被销毁之前被调用,它在拦截器的生命周期内也只被调用一次
由init和destory可以感觉到拦截器是单例的
1.Struts2会依次调用为某个Action而注册的每一个拦截器的intercept方法。
2.每次调用intercept方法时,Struts2会传递一个ActionInvocation接口的实例。
3.ActionInvocation代表一个给定的Action的执行状态,拦截器可以从该类的对象里获得与该Action相关联的Action对象和Result对象,在完成拦截器自己的任务之后,拦截器将调用ActionInvocation对象的invoke方法前进到Action处理流程的下一个环节。
4.AbstractInterceptor类实现了Interceptor接口,并为init,destroy提供了一个空白的实现。
如何实现自定义的拦截器
1.先定义一个拦截器类可以实现Interceptor接口也可以继承AbstractInterceptor抽象类
2.在struts.xml配置文件里配置
<interceptors> <interceptor-stack name="wulStack"> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> <interceptor name="wulinterceptor" class="com.wul.app.interceptors.MyInterceptor"></interceptor> </interceptors> <action name="hello" class="com.wul.app.action.TestAction"> <interceptor-ref name="wulinterceptor"></interceptor-ref> <interceptor-ref name="wulStack"></interceptor-ref> <result>/success.jsp</result> </action>
3.注意:在自定义的拦截器中可以选择不调用ActionInvocation的invoke方法,那么后续的拦截器和Action方法将不会被调用,Struts2会渲染自定义拦截器intercept方法返回值对应的result。
下面给出范例
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <interceptors> <interceptor-stack name="wulStack"> <interceptor-ref name="wulinterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> <interceptor name="wulinterceptor" class="com.wul.app.interceptors.MyInterceptor"></interceptor> </interceptors> <action name="hello" class="com.wul.app.action.TestAction"> <!-- <interceptor-ref name="wulinterceptor"></interceptor-ref>--> <interceptor-ref name="wulStack"></interceptor-ref> <result>/success.jsp</result> </action> </package> </struts>
TestAction.java
package com.wul.app.action; import com.opensymphony.xwork2.ActionSupport; public class TestAction extends ActionSupport{ /** * */ private static final long serialVersionUID = 1L; @Override public String execute() throws Exception { System.out.println("TestAction"); return SUCCESS; } }
MyInterceptor.java
package com.wul.app.interceptors; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor { /** * */ private static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("before invocation invoke"); String result = invocation.invoke(); System.out.println("after invocation invoke"); //return "success"; return result; } }
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <a href="hello.action">Hello interceptor</a> </body> </html>success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> success </body> </html>
相关文章推荐
- C#实现自定义双击事件
- WinForm实现自定义右下角提示效果的方法
- 一款超酷的Android自定义加载控件
- MFC自定义消息的实现方法
- C#实现ProperTyGrid自定义属性的方法
- php自定义错误处理用法实例
- ThinkPHP中自定义目录结构的设置方法
- C#自定义事件监听实现方法
- C#自定义事件及用法实例
- C#自定义签名章实现方法
- C#中使用IFormattable实现自定义格式化字符串输出示例
- javascript 自定义常用方法第1/2页
- 谈谈JavaScript自定义回调函数
- 自定义jQuery插件方式实现强制对象重绘的方法
- jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
- jQuery实现自定义checkbox和radio样式
- Jquery Mobile 自定义按钮图标
- jquery自定义插件开发之window的实现过程
- 使用jQuery.wechat构建微信WEB应用
- jQuery实现自定义事件的方法