标签:des style blog http io ar color 使用 sp
作者:禅楼望月
尽管Struts2已经内置了很多的拦截器,但是有时这些拦截器可能不能满足我们的需求,这时我们就必须自定义我们自己的拦截器。
如果我们要创建自己的拦截器,则必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。
import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor { @Override public void destroy() { // 在拦截器实例销毁之前被调用,主要用于销毁在 init() 中打开的资源 } @Override public void init() { /* 拦截器实例化之后,拦截器执行拦截之前,系统将回调该方法。对于每个拦截器, 该方法只被执行一次,和Servlet的init方法一样。因此方法主要用于初始化性资源。*/ } @Override public String intercept(ActionInvocation invocation) throws Exception { /* 这里执行拦截动作,和Action的execute方法一样,该方法返回一个字符串,作为 * 逻辑视图。如果该方法直接返回了一个字符串,系统则直接跳到该字符串所对应的页面, * 而不会调用被拦截的Action,该方法的参数invocation包含了被拦截的Action * 的引用,可以通过调用该参数的invoke方法,将控制权转给下一个拦截器,或者转给Action的execute方法*/ return null; } }
如果我们的拦截器不需要打开资源则可以使用com.opensymphony.xwork2.interceptor.AbstractInterceptor类,该类为我们实现了init()和destroy()方法,我们只需要实现intercept方法即可。
如,实现这样一个拦截器:登陆的时候验证用户名如果为“毛爷爷”,则转到错误页面,否则为请求添加一个日期的属性:
import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.stbc.web.Action.LoginAction; public class InterceptorHello extends AbstractInterceptor { private static final long serialVersionUID = -5407269431454126006L; private String name; public void setName(String name) { this.name = name; } @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request=ServletActionContext.getRequest(); if(request.getParameter("username").equals("毛爷爷")){ return "error"; }else { request.setAttribute("datetime", new Date()); LoginAction action=(LoginAction) invocation.getAction(); return action.execute(); } } }
实用的方法和使用内置拦截器的方法一样:
<package name="loginPackage" extends="struts-default" namespace="/login"> <interceptors> <interceptor name="interceptormaoyeye" class="test.InterceptorHello"> <param name="name">你好!</param> </interceptor> </interceptors> <action name="login" class="com.stbc.web.Action.LoginAction"> <result name="success">welcome.jsp</result> <result name="error">welcome.jsp</result> <interceptor-ref name="interceptormaoyeye"> <!-- 这里使用了反射的方法,实际上调用的是拦截器类的setName方法 --> <param name="name">覆盖了默认值</param> </interceptor-ref> </action> </package>
欢迎转载,请注明出处.
标签:des style blog http io ar color 使用 sp
原文地址:http://www.cnblogs.com/yaoyinglong/p/Struts2自定义拦截器.html