`
中国爪哇程序员
  • 浏览: 167313 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2 源码分析

阅读更多
以下代码模拟Struts2的interceptor实现

附件是struts2源码分析

1. 定义接口
public interface Interceptor
{
    String intercept(ActionInvocation invocation) throws Exception;
}


2.接口实现

public class InterceptorA implements Interceptor
{
    @Override
    public String intercept(ActionInvocation invocation) throws Exception
    {
	System.out.println("begin A");
	invocation.invoke();
	System.out.println("before interceptor's resultCode : " + invocation.getResultCode());
	System.out.println("end A");
	return "A";
    }

}


public class InterceptorB implements Interceptor
{
    @Override
    public String intercept(ActionInvocation invocation) throws Exception
    {
	System.out.println("begin B");
	invocation.invoke();
	System.out.println("before interceptor's resultCode : " + invocation.getResultCode());
	System.out.println("end B");
	return "B";
    }
}


public class InterceptorC implements Interceptor
{

    @Override
    public String intercept(ActionInvocation invocation) throws Exception
    {
	System.out.println("begin C");
	invocation.invoke();
	System.out.println("before interceptor's resultCode : " + invocation.getResultCode());
	System.out.println("end C");
	return "C";
    }
}




3.Invoke 调用
public class ActionInvocation
{

    Iterator<Interceptor> InterceptorIterator = null;
    private String resultCode = null;
    protected boolean executed = false;
    public String invoke()
    {

	if (executed)
	{
	    throw new IllegalStateException("Action has already executed");
	}
	if (InterceptorIterator.hasNext())
	{
	    Interceptor interceptor = InterceptorIterator.next();
	    try
	    {
		resultCode = interceptor.intercept(ActionInvocation.this);
	    }
	    catch (Exception e)
	    {
		e.printStackTrace();
	    }
	}
	return "fuck";
    }

    public Iterator<Interceptor> getIt()
    {
	return InterceptorIterator;
    }

    public void setIt(Iterator<Interceptor> it)
    {
	this.InterceptorIterator = it;
    }

    public Iterator<Interceptor> getInterceptorIterator()
    {
	return InterceptorIterator;
    }

    public void setInterceptorIterator(Iterator<Interceptor> interceptorIterator)
    {
	InterceptorIterator = interceptorIterator;
    }

    public String getResultCode()
    {
	return resultCode;
    }

    public void setResultCode(String resultCode)
    {
	this.resultCode = resultCode;
    }

}




4 调用
  
 public static void main(String[] args)
    {
	ActionInvocation invocation = new ActionInvocation();
	
	List<Interceptor> list = new ArrayList<Interceptor>();
	Interceptor a = new InterceptorA();
	Interceptor b = new InterceptorB();
	Interceptor c = new InterceptorC();
	list.add(a);
	list.add(b);
	list.add(c);
	Iterator<Interceptor> it = list.iterator();
	invocation.setIt(it);
	invocation.invoke();
	System.out.println("end");

    }


运行结果:

begin A
begin B
begin C
before interceptor's resultCode : null
end C
before interceptor's resultCode : C
end B
before interceptor's resultCode : B
end A
end

分享到:
评论

相关推荐

    struts2源码分析

    struts2源码详细解析51CTO下载-struts2源代码分析(个人觉得非常经典)

    Struts2源码分析

    ### Struts2源码分析 #### 一、概述 Struts2是一个基于MVC模式的开源Web应用框架,它能够帮助开发者快速构建出结构清晰、易于维护的企业级应用。Struts2的核心组件包括:`ActionContextCleanUp`、`...

    struts2源码分析总结

    本文将深入探讨Struts2的源码分析,特别是关于StrutsPrepareAndExecuteFilter的初始化过程,这是Struts2的核心组件之一,负责处理HTTP请求。 首先,我们来看`StrutsPrepareAndExecuteFilter`的初始化。这个过滤器...

    Struts2源码分析--请求处理.pdf

    Struts2源码分析--请求处理.pdf

    Struts2源码分析--请求处理[汇编].pdf

    Struts2源码分析--请求处理[汇编].pdf

    struts2部分源码分析

    本篇文章将深入探讨Struts2的运行原理,通过源码分析来揭示其内部工作机制。 首先,我们从核心组件开始。Struts2的核心组件包括Action、FilterDispatcher、Interceptor和Result。Action是业务逻辑的载体,它接收...

    Struts2源码阅读

    通过阅读Struts2的源码,我们可以深入了解框架如何处理请求、如何调度Action以及如何应用拦截器来扩展功能。这有助于开发者更好地定制和优化他们的应用程序,提高代码质量和性能。在实际开发中,对源码的理解能帮助...

    struts2源代码分析

    Struts2是一个流行的Java web应用程序框架,它基于MVC(模型-视图-控制器)设计模式,用于构建高效且可维护的web应用。Struts2是Struts1.x和WebWork社区合并的产物,可以看作是WebWork的增强版,具备稳定性、高性能...

    struts2 源码解读

    源码分析是提升编程技能和解决问题的关键,特别是对于复杂的框架如Struts2,理解其内部工作原理能够帮助我们优化应用性能,修复潜在问题,并进行定制化开发。 首先,Struts2的核心组件包括Action、Result、...

    struts2-src

    Struts2源码分析可以从以下几个关键点展开: 1. **Action与Dispatcher**:在Struts2中,Action类是业务逻辑处理的主要载体。用户请求首先会被Struts2的前端控制器(DispatcherServlet)捕获,然后根据配置文件...

    struts2源码研究

    Struts2 源码分析主要涉及其在Tomcat启动过程中的初始化步骤以及请求处理流程。首先,我们来看Tomcat启动时Struts2框架如何准备和执行。 在Tomcat启动时,Struts2的Filter文件被加载,具体是`...

    Struts2视频教程

    #### 六、Struts2源码分析 - **深入源码**:针对某些重要知识点,比如Action的执行流程、拦截器的工作原理等,本教程还会带领学员一起探索源码,加深对框架内部机制的理解。 ### 结语 通过以上对Struts2各个方面...

    struts 2 源码 导入eclipse工程

    通过上述步骤和知识点,你可以对Struts 2有更深入的理解,并且能够利用Eclipse的强大工具进行调试和代码分析,提升开发效率。同时,熟悉源码也有助于定制化开发和解决实际问题。在实践中不断探索和学习,才能更好地...

    struts2框架源码

    了解这些基本概念后,深入源码分析可以发现以下关键技术点: 1. **Dispatcher Servlet**:Struts2的核心控制器,负责接收HTTP请求,通过ActionMapper找到对应的Action,然后调用ActionInvocation进行拦截器链的执行...

    struts2 项目源码

    通过分析这个Struts2项目源码,你可以学习以下技能: 1. 如何创建Action类,并定义其方法与用户请求对应。 2. 理解配置文件`struts.xml`的结构和作用。 3. 掌握Action与视图的交互,了解结果类型的应用。 4. 学习...

Global site tag (gtag.js) - Google Analytics