`
weigang.gao
  • 浏览: 482403 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Struts2 拦截器原理模拟(13)

 
阅读更多

在struts的开发文档有一个图,从这个官方的picture,你也能大致的看出struts到底是怎么样执行的。

 说明:一个请求(HttpServletRequest)到来,它会经过FilterDispatcher(这个原来的,现在已经的是StrutsPrepareAndExecuteFilter)。当HttpServletRequest到达FilterDispatcher的时候,FilterDispatcher会帮我们创建ActionPproxy,ActionProxy通过ConfigurationManager从struts.xml配置文件中读出来相应的配置信息。ActionProxy拥有一个AcionInvocation的实例,接下来,它会调用ActionInvocation的invoke方法,在invoke方法里面,它会先调用第一个interceptor1,然后再调用第二个interceptor2,再调用第三个interceptor3,最后再调用action,action会返回一个result,根据result找到相应的视图(jsp,FreeMarker等)。然后再经过interceptor3,interceptor2,interceptor1,FilterDispatcher将用户请求的信息反馈给用户。

 

下面我们就来模拟Struts2的拦截器

工程目录结构以及文件如下:

1.ActionInvocation.java里面有action的引用和很多interceptor

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

public class ActionInvocation {

	protected Object action;// action的引用
	protected Iterator<Interceptor> interceptors;
	protected String resultCode;// 保存action执行的result

	ActionInvocation() {
		action = new Action();
		List<Interceptor> interceptorList = new ArrayList<Interceptor>();
		interceptorList.add(new FirstInterceptor());
		interceptorList.add(new SecondInterceptor());
		interceptors = interceptorList.iterator();
	}

	public String invoke() {
		if (interceptors.hasNext()) {// 是否还有下一个interceptor
			resultCode = this.interceptors.next().intercept(
					ActionInvocation.this);
		} else {// 说明所有的interceptor都调用完了,通过反射调用Action中的方法
			resultCode = this.invokeActionOnly();
		}

		return resultCode;

	}

	public String invokeActionOnly() {
		Action ac = (Action) action;
		return ac.execute();
	}

}

 2.所有的拦截器都实现的interceptor接口

public interface Interceptor {
	
	public String intercept(ActionInvocation actionInvocation);
}

 3.生成2个拦截器FirstInterceptor,SecondInterceptor,都实现了Interceptor接口

FirstInterceptor

public class FirstInterceptor implements Interceptor{

	@Override
	public String intercept(ActionInvocation invocation) {
		String result;
		System.out.println(1);
		result = invocation.invoke();
		System.out.println(-1);
		return result;
	}

} 

SecondInterceptor 

public class SecondInterceptor implements Interceptor{

	@Override
	public String intercept(ActionInvocation invocation) {
		String result;
		System.out.println(2);
		result = invocation.invoke();
		System.out.println(-2);
		return result;
	}

}

 3.编写Action

public class Action {	
	public String execute(){
		System.out.println("------execute----------");
		return "success";
	}
}

 4.编写测试类

public class Test {
	public static void main(String[] args) {
		new ActionInvocation().invoke();
	}
}
  • 大小: 178.7 KB
  • 大小: 6.8 KB
分享到:
评论

相关推荐

    struts2拦截器实现原理模拟 2013-8-8

    本文将深入探讨Struts2拦截器的工作原理及其应用。 首先,我们要理解什么是拦截器。在Struts2中,拦截器是基于AOP(面向切面编程)思想的类,它们可以拦截用户的请求,执行预定义的操作,如日志记录、权限检查、...

    模拟Struts2拦截器代码

    本文将深入探讨如何模拟Struts2的拦截器,并通过一个实际的Filter类来阐述其工作原理。 首先,我们需要理解Struts2拦截器的基本概念。拦截器是一个实现了`Interceptor`接口的Java类,它位于动作调用之前和之后,...

    运用struts2技术的拦截器实现的页面检测和用户注册

    首先,我们需要理解Struts2拦截器的工作原理。拦截器是基于Java的动态代理机制实现的,它们在Action调用之前和之后执行,形成一个拦截器链。开发者可以通过配置struts.xml或struts.properties文件来定义拦截器链和其...

    Struts通过拦截器实现登录后跳转到登录前页面

    首先,理解Struts2的拦截器工作原理。拦截器是基于Java的动态代理机制实现的,它们按照配置的顺序形成一个拦截器链,每个请求在执行动作之前会依次经过这些拦截器。在处理登录场景时,我们可以创建一个特定的拦截器...

    模拟一个拦截器

    本文将深入探讨“模拟一个拦截器”的主题,结合提供的标签“源码”和“工具”,我们将深入源代码层面理解拦截器的工作原理,并通过实际操作来模拟创建一个自定义的拦截器。 首先,我们需要了解什么是拦截器。在软件...

    struts2简单模拟

    通过实践简单的Struts2模拟代码,可以更好地理解和体验Struts2框架的工作原理和优势。在实际开发中,还需要不断学习和熟悉Struts2的高级特性,如自定义拦截器、类型转换、插件使用等,以提升开发能力。

    Struts2工作原理模拟

    总之,Struts2是一个强大且灵活的MVC框架,它的工作原理涵盖了前端控制器、拦截器、Action、结果映射等多个关键组件,提供了高效、模块化的web应用开发解决方案。通过实际项目的学习,开发者可以更好地掌握其精髓,...

    struts2框架模拟-教学示范代码

    3. **拦截器(Interceptor)**:拦截器是Struts2的一个重要特性,它可以插入到Action调用的前后,执行一些预处理或后处理任务,如日志记录、权限检查等。Struts2提供了一系列内置的拦截器,同时允许自定义拦截器以...

    servlet模拟struts1工作原理

    Struts1是Apache组织开发的一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了开发...实际开发中,虽然Struts1已经被Struts2和其他现代框架取代,但了解其工作原理对理解和使用其他框架仍然有裨益。

    Servlet简单模拟Struts2

    4. **日志拦截**:类似于Struts2的拦截器,我们可以创建一个Servlet Filter或者使用AOP(面向切面编程)来实现日志拦截。在处理请求前,记录请求信息;处理完成后,记录响应信息。这可以帮助我们跟踪应用的行为,对...

    Struts2的简单模拟

    这个“Struts2的简单模拟”项目可能是为了帮助初学者理解Struts2的核心概念和工作原理,通过实际操作来深入学习。 在Struts2框架中,主要有以下几个关键知识点: 1. **Action类**:它是业务逻辑处理的主要载体,...

    模拟struts2框架代码.rar_模拟struts框架

    然后,Struts2的拦截器(Interceptor)机制是其一大特色,它可以对Action执行前后的逻辑进行增强。在模拟实现中,我们可以创建自定义的拦截器,例如日志拦截器、权限拦截器等,并在配置文件中声明它们。 ```xml ...

    Struts2调试方法

    总之,调试Struts2应用需要全面理解其架构和工作原理,结合配置、日志、断点、拦截器等手段,逐步缩小问题范围,找到问题的根源。随着经验的积累,你将更加熟练地驾驭Struts2框架,解决各种开发难题。

    Struts2+Ajax_模拟登陆Demo,包完整

    2. **Struts2配置**:理解`struts.xml`配置文件,包括Action配置、结果类型配置、拦截器栈配置等。例如,我们可能会在Action配置中定义模拟登录的类,并指定对应的视图或结果。 3. **Ajax原理**:了解JavaScript中...

    struts2测试工具

    Struts2提供了丰富的特性,包括动作映射、结果类型、拦截器、插件支持以及与Spring等其他框架的集成,使得开发者能够构建出高效、可维护的Web应用。 标题提到的“struts2测试工具”可能是指用于测试Struts2应用程序...

    模拟struts2代码+文档

    这个"模拟Struts2代码+文档"的压缩包很可能包含了一个简化的Struts2应用实例和相关的技术文档,帮助初学者理解Struts2的工作原理和实践操作。 Struts2的核心特性包括: 1. **Action类**:在Struts2中,Action类是...

    Struts原理学习(模拟)

    Struts2引入了拦截器机制,它是一种AOP(面向切面编程)的概念,可以实现对Action执行前后的增强处理,如日志记录、权限检查等。 **8. 结果类型(Result Type)** 在Struts2中,结果不再仅仅是一个JSP页面,而是...

    模拟struts2

    1. 避免使用默认的Struts2拦截器栈,根据应用需求自定义拦截器配置。 2. 使用基于注解的配置,减少XML配置文件的复杂性。 3. 对敏感数据进行过滤和校验,防止SQL注入和跨站脚本攻击。 4. 使用最新的Struts2版本,...

    Struts2资源

    1. **拦截器机制**:Struts2利用拦截器机制处理用户的请求,这使得Struts2能够更加灵活地扩展功能,并且易于与其他技术集成。 2. **松耦合**:通过将业务逻辑控制器与Servlet API解耦,Struts2实现了更高级别的松...

Global site tag (gtag.js) - Google Analytics