Struts2的拦截器

来源:互联网 发布:slmmsk软件下载 编辑:程序博客网 时间:2024/04/28 19:09

拦截器是Struts2中非常核心的功能,有很多常用的拦截器如:staticParam、params、servletConfig、modelDriven、conversionError、validation 等

struts-default.xml文档中有一个package叫做struts-default,其中定义了很多的拦截器,我们使用的默认是defaultStack中定义的那些。

明确:过滤器和拦截器。过滤器和拦截器实现的功能是类似的,只是概念上不同。一个是Servlet规范中,一个是Struts2框架中的。使用它们可以实现AOP的变成思想。

1. 拦截器的编码步骤

1.1 编写一个类,继承AbstractInterceptor或者实现Interceptor接口

public class Demo1Action extends AbstractInterceptor{    public String interceptor(ActionInvocation invocation)throws Exception{        System.out.println("Demo1拦截前")        String rtValue = invocation.invoke();        System.out.println("Demo1拦截后");        return trValue;    }}

1.2 声明拦截器后才能使用

在struts.xml文件中

<package name="p1" extends = "struts-default">    <!-- 声明自定义的拦截器 -->    <interceptor name="demo1Interceptor" class="com.zzxb.Demo1Interceptor">    </interceptor>    <action name="action1" class="com.zzxb.action.Demo1Action">        <!-- 使用拦截器:一旦在动作标签中使用了interceptor-ref标签,默认的拦截器将失效 -->        <interceptor-ref name="demo1Interceptor"></interceptor-ref>    </action></package>

2. 过滤拦截器:能够指定拦截哪些动作,不拦截哪些动作

自定义拦截器

//检测用户是否登陆的拦截器public class LoginCheckInterceptor extends MethodFilterInterceptor{    public String doInterceptor(ActionInvocation invocation){        //判断有没有登陆        HttpSession session = ServletActionContext.getRequest().getSession();        Object obj = session.getAttribute("user");        if(obj == null){            //没有登陆            return "login";        }else{            return invocation.invoke();        }    }}
<package name="default" extends="struts-default">    <interceptors>        <interceptor name="loginCheck" class="com.zzxb.interceptors.LoginCheckInterceptor"></interceptor>        <!-- 定义拦截器栈 -->        <interceptor-stack name="mydefault">            <interceptor-ref name="defaultStack"></interceptor-ref>            <interceptor-ref name="loginCheck"></interceptor-ref>        </interceptor-stack>    </interceptors>    <!-- 把自己的mydefault搞成默认拦截器栈 -->    <default-interceptor-ref name="mydefault"/></package><package name="user" extends="default">    <action name="login" class="com.zzxb.action.UserAction" method="login">        <interceptor-ref name="mydefault">            <!-- 让loginCheck拦截器不要拦截的方法:多个值用逗号分隔 -->            <param name="loginCheck.excludeMethods">login</param>        </interceptor-ref>        <result name="login">/login.jsp</result>        <result type="redirect">/index.jsp</result>    </action></package>
0 0
原创粉丝点击