码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2自定义拦截器

时间:2014-11-30 06:24:47      阅读:179      评论:0      收藏:0      [点我收藏+]

标签: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>

欢迎转载,请注明出处.

Struts2自定义拦截器

标签:des   style   blog   http   io   ar   color   使用   sp   

原文地址:http://www.cnblogs.com/yaoyinglong/p/Struts2自定义拦截器.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!