struts2 学习总结 ---- 拦截器(interceptor)

本文深入探讨了Struts2拦截器的概念、内置拦截器的作用及使用方法,包括如何自定义拦截器以实现个性化功能,并展示了如何在实际项目中引用这些拦截器以优化应用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 拦截器(interceptor)
拦截器是struts2的核心,struts2的大部份特性都来自于它,通过它实现了struts2功能的可插拔,
struts2内置了大量的拦截器:
常用拦截器:
 拦截器  作用
 params 将请求中的数据设置 到action的属性上
 staticParams 将配置文件中Action元素的param子元素设置到action的属性上
 servletConfig 将Servlet API的各种对象注入到Action中,Action必须实现相应接口
 fileUpload 将文件和元数据从多重请求转为常规请求,便于设置到Action的属性上 
 validation 执行数据校验
 workflow 当数据校验出错时终止流程
 exception 捕获异常,并映射到用户自定义错误页面,它位于最外层
了解更多,可查看 struts 核心包下的  /struts-default.xml   文件

自定义拦截器步骤:
  1. 创建拦截器

    <!-- 1,继承AbstractInterceptor -->

    public class Myintercepter extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
    Users user = arg0.getInvocationContext().getSession().get("LoinUser");
    if(user==null){
    return "login";
    }
    return arg0.invoke();
    }

    }


    <!-- 2,实现Interceptor接口 -->

    public class Myintercepter implements Interceptor {

    public void destroy() {
    // TODO Auto-generated method stub
    }

    public void init() {
    // TODO Auto-generated method stub
    }

    public String intercept(ActionInvocation arg0) throws Exception {
    Users user = arg0.getInvocationContext().getSession().get("LoinUser");
    if(user == null){
    return "login";
    }
    return arg0.invoke();
    }
    }


    <!-- 3,继承MethodFilterInterceptor :可以实现只对相应Action类中的方法进行拦截,只需要在配置拦截器时指定 excludeMethods 或 includeMethods 参数就行-->

    public class Myintercepter extends MethodFilterInterceptor {

    @Override
    public String doIntercept(ActionInvocation arg0) throws Exception {
    Users user = arg0.getInvocationContext().getSession().get("LoinUser");
    if(user == null){
    return "login";
    }
    return arg0.invoke();
    }

    }



  2. 声明拦截器

    <interceptors>

    <!--声明拦截器-->
    <interceptor name="aaa" class="aa.bb.ClazzAA"/>

    <interceptor name="Myintercepter" class="cn.interceptor.Myintercepter">
    <param name="excludeMethods">login,regist</param>
    </interceptor>
    <interceptor name="bbb" class="aa.bb.ClazzBB"/>

    <!--声明拦截器栈-->
    <interceptor-stack name="MyStack">
    <interceptor-ref name="aa"/>
    <interceptor-ref name="bb"/>
    </interceptor-stack>
    </interceptors>


  3. 引用拦截器: 注意:一旦自己引用拦截器,默认的拦截器就不会被使用

    <interceptors>

    <!--自定义带参拦截器-->
    <interceptor name="Myintercepter" class="cn.interceptor.Myintercepter">
    <param name="excludeMethods">login,regist</param>
    </interceptor>
    <!--声明自定义拦截器-->
    <interceptor name="bbb" class="aa.bb.ClazzBB"/>
    <interceptor-stack name="MyStack"><!--自定义拦截器栈 -->
    <interceptor-ref name="Myintercepter"/>
    <interceptor-ref name="aa"/>
    <interceptor-ref name="bb"/>
    </interceptor-stack>
    </interceptors>
    <action name="*User" class="action.UserAction" method="{1}">
    <interceptor-ref name="basicStack" /><!-- 引入struts内置拦截器-->

    <interceptor-ref name="MyStack" /><!--引入自定义拦截器栈-->
    <result name="input">{1}.jsp</result>
    </action>








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值