Struts2学习笔记(十一):自定义拦截器,及其执行流程

HelloInterceptor.java:

package com.struts.interceptor;

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

/**
 * 拦截器:普通的 java 类只要实现了 interceptor 接口,就被成为 拦截器;
 *  1、在 struts2 中,把每一个功能都用一个个的拦截器实现,用户想用 struts 的哪个功能的时候,可以自由组装使用;
 *  2、在 struts2 中,为了方便用户对拦截器的使用,提供了拦截器栈的定义,里面可以包含多个拦截器;
 *  3、在 struts2 中,如果用户没有指定执行哪些拦截器,struts2 有一个默认执行的栈,defaultStack;
 *      注意:如果用户自己指定了执行哪些拦截器,那么默认的拦截器栈就不会被执行;
 *
 * struts-default.xml 文件中,定义了 struts 提供的所有拦截器!
 * <interceptors>
 *      <interceptor name="" class="" /> 拦截器定义
 *
 *      <interceptor-stack name="defaultStack"> 拦截器栈的定义
 * 	        引用了上面定义的拦截器(<interceptor/>)
 *      </interceptor-stack>
 * </interceptors>
 *
 * 默认执行的拦截器:
 *  <default-interceptor-ref name="defaultStack"/>
 */
public class HelloInterceptor implements Interceptor {

    // 服务器启动的时候执行
    public HelloInterceptor(){
        System.out.println("1、创建了拦截器对象");
    }

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

    // 拦截器业务处理方法:每次访问 action 的时候执行
    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        System.out.println("4、拦截器:业务处理开始");

        // 执行下一个拦截器;
        // 或者执行 action 中的业务处理方法,并获取方法的返回值
        String result = actionInvocation.invoke();

        System.out.println("6、拦截器:业务处理结束");
        return result;
    }

    // 服务器关闭的时候调用
    @Override
    public void destroy() {
        System.out.println("7、拦截器销毁");
    }

}

HelloAction.java:

package com.struts.interceptor;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {

    // 访问 action 的时候执行:先创建 action 对象,再执行 拦截器;
    public HelloAction(){
        System.out.println("3、创建 action 对象");
    }

    @Override
    public String execute() throws Exception {
        System.out.println("5、执行 action 中的业务处理方法");
        return SUCCESS;
    }
}

struts.xml:

<?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>
	<package name="interceptor" extends="struts-default">
		<!-- 拦截器配置 -->
		<interceptors>
			<!-- 配置自定义拦截器 -->
			<interceptor name="helloInterceptor" class="com.struts.interceptor.HelloInterceptor"/>

			<!-- 配置拦截器栈 -->
			<interceptor-stack name="helloStack">
				<!-- 引用默认栈:一定要放到第一行(先引用的先执行) -->
				<interceptor-ref name="defaultStack"/>

				<!-- 引用自定义拦截器 -->
				<interceptor-ref name="helloInterceptor"/>
			</interceptor-stack>
		</interceptors>

		<!-- 配置默认执行的 拦截器栈 -->
		<default-interceptor-ref name="helloStack"/>

		<!-- 配置 action -->
		<action name="hello" class="com.struts.interceptor.HelloAction" method="execute">
			<result name="success">/index.jsp</result>
		</action>
	</package>
</struts>

拦截器执行流程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值