struts2入门教程四(拦截器)

拦截器概念:

拦截器(Interceptor),在AOP(Aspect-OrientedProgramming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

   在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

Struts2将它的核心功能放到拦截器中实现,而不是分散到Action中实现,有利于系统的解耦,使得功能的实现类似于个人电脑的组装,变成了可插拔的,需要某个功能就“插入”一个拦截器,不需要某个功能就“拔出”一个拦截器。你可以任意组合拦截器来为Action提供附加的功能,而不需要修改Action的代码。

 

拦截器工作方式

如下图:

struts2入门教程四(拦截器)_第1张图片

Struts2内置拦截器

struts2入门教程四(拦截器)_第2张图片

struts2入门教程四(拦截器)_第3张图片

struts2入门教程四(拦截器)_第4张图片

struts2入门教程四(拦截器)_第5张图片

自定义 计时拦截器

一:继承AbstractInterceptor 抽象类

Java 代码

package action;
 
import com.opensymphony.xwork2.ActionSupport;
 
public classHelloAction extends ActionSupport {
 
    private String message;
  
   @Override
   public String execute() throws Exception {
      message="Hello";
      return super.execute();
   }
 
   public String getMessage() {
      return message;
   }
 
   public void setMessage(Stringmessage) {
      this.message = message;
   }
 
  
}

 

Jsp代码:----仅为测试用

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>


 
 My JSP 'index.jsp' starting page
  
  
  ${message }
 

 

Struts.xml




 
   
      
         
        
         计时拦截器
         
       
      
         
            /index.jsp
          
         
         HelloAction 计时拦截器        
         
      
    


 自定义的拦截器—java代码

package util;
 
import java.util.Date;
 
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 
public classMyInterceptor extends AbstractInterceptor{
 
   /**
    *
    */
   private static final long serialVersionUID= 1L;
 
  
   private String name;
  
   @Override
   public Stringintercept(ActionInvocation invocation) throws Exception {
     
     
      System.out.println("调用前"+new Date());
     
      long start=System.currentTimeMillis();
      Stringresult=invocation.invoke();
     
      long end=System.currentTimeMillis();
      System.out.println("调用后"+new Date());
     
      System.out.println(name+"用时"+(end-start));
      return result;
   }
 
   public void setName(String name) {
      this.name = name;
   }
   
}


效果图

struts2入门教程四(拦截器)_第6张图片

 

二:继承MethodFilterInterceptor

Java代码

 添加两个方法用来测试

 

public String add() {
      message="add";
      return SUCCESS;
   }
   public String delete() {
      message="delete";
      return SUCCESS;
   }


自定义的拦截器—java代码

package util; 
import java.util.Date; 
importcom.opensymphony.xwork2.ActionInvocation;
importcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
 
public class MethodInteceptor extends MethodFilterInterceptor {
 
         /**
          *
          */
         privatestatic final long serialVersionUID = 1L;
         privateString name;
        
         @Override
         publicString doIntercept(ActionInvocation invocation) throws Exception {
                  
                  
                   System.out.println(name+"调用前"+newDate());
                  
                   longstart=System.currentTimeMillis();
                   Stringresult=invocation.invoke();
                  
                   longend=System.currentTimeMillis();
                   System.out.println(name+"调用后"+newDate());
                  
                   System.out.println(name+"用时"+(end-start));
                   returnresult;
         }
 
         publicvoid setName(String name) {
                   this.name= name;
         }
 
 
}


Struts.xml




 
   
      
         
 
            计时拦截器1
         
         
 
            计时拦截器2
         
      
 
 
      
         
            /index.jsp
         
 
 
         
            HelloAction 计时拦截器1
         
         
            HelloAction 计时拦截器2
            add,delete
            execute
         
 
 
      
   
 


效果图:


解释说明:

MethodFilterInterceptor通过指定included/excluded方法列表来选择拦截器或排除的方法,可以设置的参数如下:

excludeMethods-------要排除的方法。

includeMethods--------要拦截的方法

 

由于 struts.xml 文件中国将 add与delete 方法排除故不生效。所以出现如下状况!

访问:http://localhost:8080/interceptor/hello/execute

 struts2入门教程四(拦截器)_第7张图片

访问http://localhost:8080/interceptor/hello/add

 struts2入门教程四(拦截器)_第8张图片

 

你可能感兴趣的:(struts2,struts2,interceptor)