以下代码模拟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源码详细解析51CTO下载-struts2源代码分析(个人觉得非常经典)
### Struts2源码分析 #### 一、概述 Struts2是一个基于MVC模式的开源Web应用框架,它能够帮助开发者快速构建出结构清晰、易于维护的企业级应用。Struts2的核心组件包括:`ActionContextCleanUp`、`...
本文将深入探讨Struts2的源码分析,特别是关于StrutsPrepareAndExecuteFilter的初始化过程,这是Struts2的核心组件之一,负责处理HTTP请求。 首先,我们来看`StrutsPrepareAndExecuteFilter`的初始化。这个过滤器...
Struts2源码分析--请求处理.pdf
Struts2源码分析--请求处理[汇编].pdf
本篇文章将深入探讨Struts2的运行原理,通过源码分析来揭示其内部工作机制。 首先,我们从核心组件开始。Struts2的核心组件包括Action、FilterDispatcher、Interceptor和Result。Action是业务逻辑的载体,它接收...
通过阅读Struts2的源码,我们可以深入了解框架如何处理请求、如何调度Action以及如何应用拦截器来扩展功能。这有助于开发者更好地定制和优化他们的应用程序,提高代码质量和性能。在实际开发中,对源码的理解能帮助...
Struts2是一个流行的Java web应用程序框架,它基于MVC(模型-视图-控制器)设计模式,用于构建高效且可维护的web应用。Struts2是Struts1.x和WebWork社区合并的产物,可以看作是WebWork的增强版,具备稳定性、高性能...
源码分析是提升编程技能和解决问题的关键,特别是对于复杂的框架如Struts2,理解其内部工作原理能够帮助我们优化应用性能,修复潜在问题,并进行定制化开发。 首先,Struts2的核心组件包括Action、Result、...
Struts2源码分析可以从以下几个关键点展开: 1. **Action与Dispatcher**:在Struts2中,Action类是业务逻辑处理的主要载体。用户请求首先会被Struts2的前端控制器(DispatcherServlet)捕获,然后根据配置文件...
Struts2 源码分析主要涉及其在Tomcat启动过程中的初始化步骤以及请求处理流程。首先,我们来看Tomcat启动时Struts2框架如何准备和执行。 在Tomcat启动时,Struts2的Filter文件被加载,具体是`...
#### 六、Struts2源码分析 - **深入源码**:针对某些重要知识点,比如Action的执行流程、拦截器的工作原理等,本教程还会带领学员一起探索源码,加深对框架内部机制的理解。 ### 结语 通过以上对Struts2各个方面...
通过上述步骤和知识点,你可以对Struts 2有更深入的理解,并且能够利用Eclipse的强大工具进行调试和代码分析,提升开发效率。同时,熟悉源码也有助于定制化开发和解决实际问题。在实践中不断探索和学习,才能更好地...
了解这些基本概念后,深入源码分析可以发现以下关键技术点: 1. **Dispatcher Servlet**:Struts2的核心控制器,负责接收HTTP请求,通过ActionMapper找到对应的Action,然后调用ActionInvocation进行拦截器链的执行...
通过分析这个Struts2项目源码,你可以学习以下技能: 1. 如何创建Action类,并定义其方法与用户请求对应。 2. 理解配置文件`struts.xml`的结构和作用。 3. 掌握Action与视图的交互,了解结果类型的应用。 4. 学习...