struts之拦截器

一、使用Struts拦截器

1.配置并使用Struts拦截器

1.1 配置拦截器

 在Struts.xml文件中配置

<interceptor name="拦截器名称" class="实现类" >
    <param name=" ">参数值</param>
</interceptor>
 

1.2 拦截器栈

 拦截器栈中的各个拦截器是按照其定义的顺序执行的。

<package name="default" extends="struts-default">
<interceptors>
<interceptor name="in1" class="class1" />
<interceptor name="in2" class="class2" />
   <interceptor-stack name="myStack" >
       <interceptor-ref name="in1" />
       <interceptor-ref name="in2" />
       <interceptor-ref name="defaultStack" />    !!defaultStack为Struts2内置拦截器栈
 </interceptor-stack>
</interceptors>
</package>


 1.3 默认拦截器 

<package name="default" extends="struts-default">
<interceptors>
   <interceptor name="in1" class="class1" />
   <interceptor name="in2" class="class2" />
   <interceptor-stack name="myStack" >
      <interceptor-ref name="in1" />
      <interceptor-ref name="in2" />
      <interceptor-ref name="defaultStack" />   !!defaultStack为Struts2内置拦截器栈</span>
   </interceptor-stack>
</interceptors>
<!--配置包下的默认拦截器,既可以是拦截器,也可以是拦截器栈-->
<default-interceptor-ref name="myStack"/>
  <action name=" " class=" ">
    <result name=" ">/xxx.jsp</result>
  </action>
</package>

 1.4 使用拦截器 

<package name="default" extends="struts-default">
<interceptors>
   <interceptor name="in1" class="class1" />
   <interceptor name="in2" class="class2" >      
      <param name="paramName">value1</param> 
   </interceptor>  
     <interceptor-stack name="myStack" >
             <interceptor-ref name="in1" />
             <interceptor-ref name="in2" />
          <param name="paramName">value2</param>
      </interceptor-ref>  
  </interceptor-stack>
</interceptors>
<!--配置包下的默认拦截器,既可以是拦截器,也可以是拦截器栈-->
<default-interceptor-ref name="myStack"/>
  <action name=" " class=" ">
    <result name=" ">/xxx.jsp</result>
    <!-- 应用自定义的拦截器in1和拦截器栈myStack -->
    <interceptor-ref name="in1" />
    <interceptor-ref name="myStack" >
         <param name="in2.paramName">value3</param>
    </interceptor-ref>
 </action>
</package>


 2. Struts2的内置拦截器 

 【 p246】表8.1 :常用拦截器器及描述

Struts2框架中的内置拦截器定义在struts-default.xml文件中。

二、自定义拦截器

1.开发自定义拦截器

  需要实现com.opensymphony.xwork2.interceptor.Interceptor接口,接口源代码:

Public interface Interceptor extends Serializable{
   void init();
   void destroy();
   String intercept(ActionInvocation invocation)throws Exception;
}

 init() :拦截器执行之前调用init()方法,主要用于初始化系统资源。只执行一次 

destroy() :拦截器实例被销毁之前,系统会调用该方法来释放和拦截器相关的资源。

intercept() :用来添加真正执行拦截工作的代码,实现具体的拦截工作。系统根据返回的字符串跳转到对应的视图资

                  源。ActionInvocation参数包含了被拦截的Action的引用,可通过其invoke()方法,将控制权转给下一个拦截

                  器或者Action的execute()方法。

得意实际中多是继承抽象拦截器类AbstractInterceptor。只有当自定义的拦截器类需要打开系统资源时,才需覆盖AbstractInterceptor类的init()和destroy()方法。

2.配置自定义拦截器

 <interceptor name=" " class=" " />

3.拦截器执行顺序

 Struts2拦截器机制采用“动作调用链”机制嵌套调用拦截器。 当在某个拦截器方法中调用invoke()方法时,就会调用下一个拦截器方法,如此嵌套调用下去,若是最后一个拦截器,则会调用Action的execute()方法。Action执行完后,依次返回执行拦截器中剩余代码,直至回到第一个拦截器,最后返回到结果视图。

4.方法过滤拦截器

   可以有选择的拦截Action中的某个指定方法。

     自定义方法过滤拦截器需继承MethodFilterInterceptor抽象类,该抽象类定义了一个doIntercept()抽象方法。

public class MyMethodFilterInterceptor extends MethodFilterInterceptor{
    protected String doIntercept(ActionInvocation invocation)throws Exception{
        String result = invocation.invoke();
        return result;
    }
}
    方法过滤拦截器中新增了excludeMethods(不拦截)和includeMethods(拦截)两个参数,并提供了 public void setExcludeMethods(String excludeMethods)public void setIncludeMethods(String includeMethods)两个方法
<action name=" " class=" ">
    <result>/xxx.jsp</result>
    <interceptor-ref name=" ">
        <param name="excludeMethods">execute,method1</param>
        <param name="includeMethods">execute,method2,method3</param>
    </interceptor-ref>
</action>

 

!! 拦截器与过滤器区别

  过滤器普遍存在于整个Java Web中,范围更广,可过滤一切对象包括Action和JSP请求等.需要在web.xml中首先配置该过滤器,然后再进行其他Struts2的配置;

  拦截器是Struts2框架特有的,只能拦截Action。


由于Struts2中规定将所有Jsp页面都放在WEB-INF下,访问时只能先访问Action,再通过Action访问Jsp。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值