Struts拦截器(转)

xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="hello" extends="struts-default">
    
        <!-- 【拦截器配置】 -->
        <interceptors>
        
            <!-- 配置用户自定义的拦截器 -->
            <interceptor name="helloInterceptor" class="cn.itcast.a_interceptor.HelloInterceptor"></interceptor>
            
            <!-- 自定义一个栈: 要引用默认栈、自定义的拦截器 -->
            <interceptor-stack name="helloStack">
                <!-- 引用默认栈 (一定要放到第一行)-->
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <!-- 引用自定义拦截器 -->
                <interceptor-ref name="helloInterceptor"></interceptor-ref>
            </interceptor-stack>
            
        </interceptors>
        
        <!-- 【执行拦截器】 -->
        <default-interceptor-ref name="helloStack"></default-interceptor-ref>
        
    
        <!-- Action配置 -->
        <action name="hello" class="cn.itcast.a_interceptor.HelloAction">
            <result name="success">/index.jsp</result>
        </action>
    
    
    </package>
</struts>

action

package cn.itcast.a_interceptor;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Action开发测试
 * @author Jie.Yuan
 *
 */
public class HelloAction extends ActionSupport{

    public HelloAction() {
        System.out.println("1. Action实例创建了");
    }
    
    @Override
    public String execute() throws Exception {
        System.out.println("3. 执行了请求处理的方法: execute");
        return super.execute();
    }
}

Interceptor

package cn.itcast.a_interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

/**
 * 自定义拦截器
 * @author Jie.Yuan
 *
 */
public class HelloInterceptor implements Interceptor{
    
    // 启动时候执行
    public HelloInterceptor(){
        System.out.println("创建了拦截器对象");
    }

    // 启动时候执行
    @Override
    public void init() {
        System.out.println("执行了拦截器的初始化方法");
    }

    // 拦截器业务处理方法 (在访问action时候执行? 在execute之前执行?)
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("2. 执行Action之前");
        
        // 调用下一个拦截器或执行Action  (相当于chain.doFilter(..)
        // 获取的是: execute方法的返回值
        String resultFlag = invocation.invoke();
        
        System.out.println("4. 拦截器,业务处理-结束" + resultFlag);
        
        return resultFlag;
    }
    

    @Override
    public void destroy() {
        System.out.println("销毁....");
    }


}

 

posted @ 2016-07-10 12:57  damon2016  阅读(181)  评论(0编辑  收藏  举报