Struts2拦截器的建立与配置

    拦截器的意思是这样的:在进行一个操作(调用方法时),它会在用户执行操作前进行一系列操作,同样在用户操作完成后进行一系列操作。

    在Struts2自定义拦截器也可以完成大部分Struts2功能。下面是一个简单的拦截器建立与配置的过程。

建立拦截器类。拦截器类需要实现Interceptor接口,由于Interceptor接口有三个方法,分别是destroy()方法,init()方法,intercept()方法。而在实际使用中大部分只有intercept()方法需要重写,因此实现Interceptor接口显得过于累赘。因此拦截器类可以继承AbstractInterceptor类,AbstractInterceptor类重写了Interceptor接口的三个方法,因此拦截类只要继承AbstractInterceptor类就可以只是重载intercept()方法了。

下面的拦截器类简单的重载了intercept()方法,在执行了Action类的execute()方法之前以及之后各打印语句,显示拦截器实际发生了拦截行为。

package net.hncu.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor{
 //拦截器的名称
 private String interceptorName;
 
 public void setInterceptorName(String interceptorName){
  this.interceptorName=interceptorName;
 }
 
 //实现拦截的方法
 public String intercept(ActionInvocation invocation)throws Exception{
  //拦截执行时首先打印该语句
  System.out.println(interceptorName+"拦截前操作");
  
  //调用下一个拦截器或者直接调用Action的execute方法
  String result=invocation.invoke();
  
  //拦截器执行后打印该语句
  System.out.println(interceptorName+"拦截后操作");
  
  return result;
 }
}

配置拦截器,在struts.xml中配置拦截器,只有一个拦截器时,只要在<package>标签内配置一个拦截器

     <interceptors>

    

      <interceptor name="myInter1" class="net.hncu.interceptor.MyInterceptor">

       <param name="interceptorName">拦截器一</param>

      </interceptor>


在多个拦截器共同存在的情况下,配置拦截器需要用来拦截器栈来进行配置。配置如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />
    <include file="example.xml"/>

    <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />
        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>
 -->
  
     <package name="default" namespace="/" extends="struts-default">
     
     <interceptors>
    
      <interceptor name="myInter1" class="net.hncu.interceptor.MyInterceptor">
       <param name="interceptorName">拦截器一</param>
      </interceptor>
     
     
    
      <interceptor name="myInter2" class="net.hncu.interceptor.MyInterceptor2">
       <param name="interceptorName">拦截器二</param>
      </interceptor>
 
     
     <interceptor-stack name="myInterStack">
       <interceptor-ref name="myInter1">
        <param name="interceptorName">自定义拦截器一</param>
       </interceptor-ref>
       <interceptor-ref name="myInter2">
        <param name="interceptorName">自定义拦截器二</param>
       </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
     </interceptor-stack>
     
       </interceptors> 
      
        <action name="login" class="net.hncu.struts2.action.LoginAction">
         <result name="error">/login_failure.jsp</result>
            <result name="success">/login_success.jsp</result>
            <result name="input">/login.jsp</result>
             
             <interceptor-ref name="myInterStack"></interceptor-ref>
        </action>
    </package>
    
 
  <!-- Add packages here -->
</struts>

其中两个拦截器都在<param>标签中指定了指定了变量,便于结果显示。部署项目,执行项目,在控制台的显示结果如下

Struts2拦截器的建立与配置

你可能感兴趣的:(struts2,拦截器)