Struts2拦截器

第十、拦截器
10.1、action拦截
10.2、全局拦截
10.3、方法拦截

10.1、action拦截
该拦截会拦截掉整个action中的所以方法。
主要内容:
1、创建拦截器类,继承 AbstractInterceptor 类。
2、在struts.xml中的package里面定义拦截器,action里面调用拦截器。

范例:
拦截器代码( InterceptorDome1):
package com.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class InterceptorDome1 extends AbstractInterceptor {
       /**
       *
       */
       private static final long serialVersionUID = 1L;
       @Override
       public String intercept(ActionInvocation arg0) throws Exception {
             // 在此添加判断条件。
            System. out .println( "拦截器已拦截。" );        
             return arg0.invoke();
      }  
}
配置代码(struts.xml):
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
< struts >
   < package name = "user" namespace = "/" extends = "struts-default" >
      < interceptors >
         < interceptor name = "Interceptor1" class = "com.interceptor.InterceptorDome1" ></ interceptor >
      </ interceptors >

      < action name = "log*" class = "com.action.LoginAction" method = "log{1}" >
         < result   name = "success" > /log{1}. jsp </ result >
         < interceptor-ref name = "Interceptor1" />
         <!-- 当定义使用自己的拦截器后,struts本身自带的31个拦截器就无法使用,必须手动添加 -->
         < interceptor-ref name = "defaultStack" ></ interceptor-ref >
         < allowed-methods > login,logout </ allowed-methods >   
         
      </ action >
   </ package >
</ struts >

10.2、全局拦截
只需要在action拦截的的基础上更改struts.xml配置即可。
范例:
struts.xml
< struts >
   < package name = "user" namespace = "/" extends = "struts-default" >
  
      < interceptors >
         < interceptor name = "Interceptor1" class = "com.interceptor.InterceptorDome1" />
         <!-- 定义自己的拦截器栈 ,里面的拦截器会被 一起调用 -- >
         < interceptor-stack name = "myStack" >
              < interceptor-ref name = "Interceptor1" />
              < interceptor-ref name = "defaultStack" />
         </ interceptor-stack >
      </ interceptors >
      <!-- 定义所以action都会调用的拦截器栈 -->
       < default-interceptor-ref name = "myStack" ></ default-interceptor-ref >

      <!-- 定义全局的result,无论哪个被拦截器拦截的action都会相应到需要的页面 -->
      < global-results >
          < result name = "fail" > /fail.jsp </ result >
      </ global-results >
      < action name = "log*" class = "com.action.LoginAction" method = "log{1}" >
         < result   name = "success" > /log{1}. jsp </ result >
         < allowed-methods > login,logout </ allowed-methods >      
      </ action >
   </ package >
</ struts >

10.3、方法拦截
范例:
拦截器: InterceptorDome.java
package com.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class InterceptorDome extends MethodFilterInterceptor {
       private static final long serialVersionUID = 1L;
       @Override
       protected String doIntercept(ActionInvocation arg0) throws Exception {
            System. out .println( "执行拦截" );
             return arg0.invoke();
      }
}
struts.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  
   < struts >
     < package name = "user" namespace = "/" extends = "struts-default" >
    
        < interceptors >
          < interceptor name = "interceptor1" class = "com.interceptor.InterceptorDome" ></ interceptor >
        </ interceptors >
       
        < action name = "user*" class = "com.action.UserAction" method = "{1}" >
           < result name = "success" > /{1}. jsp </ result >
          
           < interceptor-ref name = "interceptor1" >
               < param name = "includeMethods" > edit </ param >
               <!-- <param name="excludeMethods">edit </param> -->
           </ interceptor-ref >
           < interceptor-ref name = "defaultStack" ></ interceptor-ref >
           < allowed-methods > add,edit </ allowed-methods >
        </ action >
     </ package >
   </ struts >




欢迎大家的提问和纠正。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值