Struts2的拦截器

拦截器是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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值