【struts2】拦截器的工作模拟实现

Main.java

/**
* 书本:【struts2】
* 功能:模拟拦截器的工作,实际就是递归的思想
* 文件:Main.java
* 时间:2014年11月9日20:04:55
* 作者:cutter_point
*/
public class Main
{
	public static void main(String [] args)
	{
		new ActionInvocation().invoke();
	}
}

ActionInvocation.java

/**
* 书本:【struts2】
* 功能:模拟拦截器的工作
* 文件:ActionInvocation.java
* 时间:2014年11月9日20:04:55
* 作者:cutter_point
*/

import java.util.ArrayList;
import java.util.List;

public class ActionInvocation
{
	List<Interceptor> interceptors=new ArrayList<Interceptor>();
	int index = -1;	//来指示循环到了第几个interceptor了
	Action a = new Action();

	public ActionInvocation()	//构造函数
	{
		this.interceptors.add(new FirstInterceptor());
		this.interceptors.add(new SecondInterceptor());
	}

	public void invoke()
	{
		index ++;
		if(index >= this.interceptors.size())
		{
			a.execute();
		}
		else
		{

			this.interceptors.get(index).intercept(this);
		}
	}
}

Interceptor.java

/**
* 书本:【struts2】
* 功能:模拟拦截器的工作
* 文件:Interceptor.java
* 时间:2014年11月9日20:04:55
* 作者:cutter_point
*/
public interface Interceptor
{
	public void intercept(ActionInvocation invocation);
}

FirstInterceptor.java

/**
* 书本:【struts2】
* 功能:模拟拦截器的工作
* 文件:FirstInterceptor.java
* 时间:2014年11月9日20:04:55
* 作者:cutter_point
*/
public class FirstInterceptor implements Interceptor
{

	public void intercept(ActionInvocation invocation)
	{
		System.out.println(1);
		invocation.invoke();
		System.out.println(-1);
	}

}

SecondInterceptor.java

/**
* 书本:【struts2】
* 功能:模拟拦截器的工作
* 文件:SecondInterceptor.java
* 时间:2014年11月9日20:04:55
* 作者:cutter_point
*/
public class SecondInterceptor implements Interceptor
{

	public void intercept(ActionInvocation invocation)
	{
		System.out.println(2);
		invocation.invoke();
		System.out.println(-2);
	}

}

Action.java

/**
* 书本:【struts2】
* 功能:模拟拦截器的工作
* 文件:Action.java
* 时间:2014年11月9日20:04:55
* 作者:cutter_point
*/
public class Action
{
	public void execute()
	{
		System.out.println("execute!");
	}
}

struts2的拦截器说白了就是几个递归调用,这里代码可以执行以下,可以吧断点设置在new ActionInvocation().invoke();这里,然后一步一步地执行,然后一点一点的体会应该就懂了

记住就一点,递归调用

时间: 2024-10-13 05:38:21

【struts2】拦截器的工作模拟实现的相关文章

Debug查看Struts2中ExceptionMappingInterceptor拦截器怎么把ExceptionHolder放入值栈中,以及理解拦截器的工作原理。。。

1.小案例代码: jsp界面: <body> <s:property value="exceptionStack"/><br> <s:property value="exception"/><br> <s:property value="exception.getMessage"/> <form action="product-details.action&q

Struts2拦截器的使用 (详解)

这位仁兄的写的不错,我照抄过来了:http://www.blogjava.net/i369/articles/162407.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):<interceptor-ref name="checkbox">  <param name=&q

Struts2.x教程(三) Struts2拦截器

一.Struts2拦截器介绍 Struts2拦截器是使用AOP实现的,主要是针对action对象进行拦截,可以在访问action的某个方法.字段之前或之后实施拦截. 可以为action配置多个拦截器,Struts2会将这一组拦截器按照一定顺序组织成一个拦截器栈.action可以直接引用某个拦截器栈来实现配置多个拦截器的目的. 对于继承struts_default的package中的action,都会默认引用name=defaultStack的拦截器栈(在struts_default中定义了Str

基于SSH2框架Struts2拦截器的登录验证实现(转)

大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证. 修改数据库 在user表中增加password字段,将初始密码都设为123,因为是示例所以采用明码,实际开发中,当然不能这样做,需要进行加密处理.再将name改为username,其实name字段可以不用改名,我这样做是为了命名规范,请注意,如果字段改为username,User类中的对应属性也要进行相应变化(如果你加注

Struts2拦截器的使用

一.理解Struts2拦截器 1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2.拦截器栈(Interceptor Stack).Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链.在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用. 二.实现Struts2拦截器原理 Struts2拦截器的实现原理相对简单,当请求struts2的acti

struts2拦截器的实现机制

前言 最近老大让每周写一篇技术性的博客,想想也没啥写,就想着随便拿个以前的项目去研究研究五大框架的底层代码.本人水平有限,有不对的地方还望大家勿喷,指正! 开始之前先了解下strtus2的工作流程: 工作原理图: (1) 客户端(Client)向Action发用一个请求(Request) (2) Container通过web.xml映射请求,并获得控制器(Controller)的名字 (3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或Fil

Struts2拦截器 关于解决登录的问题_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 拦截器的工作原理如图 拦截器是由每一个action请求(request)都包装在一系列的拦截器的内部,通过redirectAction再一次发送请求. 拦截器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作. 我们可以让每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面. 接下来我们该如何定义一个拦截器: 自定义一个拦截器如下: 1.实现In

Struts2拦截器概述

--------------------siwuxie095 Struts2 拦截器概述 1.Struts2 框架封装的很多功能都在 Struts2 的拦截器中 2.Struts2 框架中有很多拦截器,但这些拦截器不是每次 都执行,只有默认拦截器才会每次都执行 3.Struts2 默认拦截器的位置 「注意:默认拦截器中也有很多拦截器」 4.拦截器的执行 在 Action 对象创建之后,在 Action 方法执行之前 [made by siwuxie095]

笔记:Struts2 拦截器

配置拦截器 Struts.xml 配置文件中,使用<interceptor-/>来定义拦截器,有属性 name 表示拦截器的名称,class 表示拦截器的具体首先类,可以使用<param-/>子元素来配置拦截器的参数,配置示例: <package name="包名称" extends="抽象包名称"> <interceptors> <interceptor name="拦截器名称" class