Struts2的拦截器机制

Struts2的拦截器机制:

Struts2的拦截器机制:
1:拦截器是struts2中一个重要的组成部分,可以吧struts2比喻成一个大的空容器,大量的拦截器完成了该框架的大部分操作,例如param拦截器负责解析http请求的参数,并设置action的属性,servlet—config 拦截器直接将http请求中的HttpServletRequest 实例和HttpServletResponse 实例;fileUpload拦截器直接负责解析参数中的文件域,并将一个文件域设置成action的3个属性
2:struts2中的拦截器是一个可拔插的设计,只需将需要使用的拦截器配置文件中简单配置就可以了
拦截器在struts2中的作用:
1:对于任何的mvc框架来说,都会完成一个通用的控制逻辑,例如“参数的解析”,“类型的转换”,将参数封装等操作,然而在早期的 struts1中这些动作被写死在系统的 核心控制器中,带来了很多的缺点“:
1:灵活性差:不管用户是否需要都会触及到
2:可宽展行差:很难定义自定义的处理
Struts2中的大部分拦截器都是按功能分开定义,每个拦截器完成一个独立的模块,这些拦截器之间可以自由选择,灵活组合,开发者只需在struts.xml中指定该拦截器
Struts2中绝大多数的拦截器都是通过拦截器来完成的,当FilterDispatcher拦截到用户的请求时,大量的拦截器会对用户的请求进行处理,然后调用用户的action进行相应的逻辑处理
这里写图片描述

Struts2中内建的拦截器:(仅仅介绍几个日常工作中经常使用的)
1:chain:构建一个action链,使当前action可以访问前一个action的属性,一般和

!--定义全部的拦截器-->
<interceptors>
    <!--定义第一个拦截器-->
    <interceptor name="myInterceptor" class="guoliang.MyInterceptor"/>
    //第二个拦截器
    <interceptor name="mysecondInter" class="guoliang.secondInter"/>
</interceptors>
//定义action
<action name="login" class="guoliang.LoginAction">
    //配置映射
    <result name="error">/error.jsp</result>
    <result name="success">/welcome.jsp</result>
    //拦截器一般配置在result之后
    //使用系统默认的拦截器
    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="myInterceptor"/>
    <interceptor-ref name="mysecondInter"/>
</action>

上面的三个拦截器在其中defaultStack是默认的拦截器,在执行action之前,这三个拦截器都会执行

配置默认的拦截器
如果配置显示的制指定了拦截器,则默认的拦截器不在起作用,需要手动的指定默认的拦截器,同时每个包中只能指定一个默认的拦截器,如果需要指定多个默认的拦截器,则可以配置成拦截器栈,因为struts-default中如下 的片段:

    <package name="struts-default">
            ....
            <!-- 指定struts2的默认拦截器 -->
            <default-interceptor-ref name="defaultStack"/>
        </package>

所以我们在继承了struts-default包之后,就不需要显示的声明需要使用哪个拦截器
当然用户也可以定义自己的拦截器:
应该实现Interceptor接口
该类中的部分源码:

public interface Interceptor extends Serializable{
    //销毁该拦截器之前的回调方法
    void destroy();
    //初始化该拦截器是的方法;
    void init();
    //拦截器实现的逻辑方法,一般只需实现该方法即可
    String intercept(ActionInvocation invocation)throws Exception
}

String intercept(ActionInvocation invocation)throws Exception:就像action的方法一样该方法会返回一个字符串,作为逻辑视图,如果该方法直接返回了一个字符串,系统会跳转到该逻辑视图对应的实际视图资源,不会调用被拦截的action,该方法的ActionInvocation参数包含了被拦截的action的引用,可以通过调用该参数的invoke方法,将控制权转给下一个拦截器,或者action的excute

下次将实现一个拦截器类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值