`

struts2 Action创建过程分析

阅读更多
//源头:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
===================================
第零步:Struts Filter初始化
===================================
关键概念:
InitOperations
PrepareOperations
ExecuteOperations
FilterHostConfig
Dispatcher

===================================
第一步:ActionMapping创建
===================================
URL:http://localhost:8080/basic/My.do
对于浏览器发出的每个新的request,都会创建一个ActionMapping对象,
这里的request、response、servletContext等servlet基本元素,都是经过应用服务器(如Tomcat)包装过的实现
ActionMapping mapping = prepare.findActionMapping(request, response);


===================================
第二步:创建Action并执行(一)
===================================
execute.executeAction(request, response, mapping);


struts2的所有细节都包含在Dispatcher的serviceAction方法中
在详细分析之前,先介绍一个很重要的类:ActionContext,该类利用ThreadLocal持有一个action执行过程中要用到的所有对象,如session,application,valueStack...

回到Dispatcher.serviceAction(...):
(1)创建ValueStack,ValueStack可以看作是呈现层的数据源(有待研究...)
(2)创建ActionProxy

//src:com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy
        DefaultActionProxy proxy = new DefaultActionProxy(inv, namespace, actionName, methodName, executeResult, cleanupContext);
        container.inject(proxy);
        proxy.prepare();

===================================
第二步:创建Action并执行(二)
DefaultActionProxy.prepare();
===================================
//src:com.opensymphony.xwork2.DefaultActionProxy.prepare()
//读取action配置信息
config = configuration.getRuntimeConfiguration().getActionConfig(namespace, actionName);
//确定调用的方法(默认:execute)
resolveMethod();
//(1)objectFactory(spring)真正创建Action对象
//(2)获取该action的interceptors
invocation.init(this);

init方法:
createAction() {
//...
     action = objectFactory.buildAction(proxy.getActionName(),     proxy.getNamespace(), proxy.getConfig(), contextMap);
//...
}
        List<InterceptorMapping> interceptorList = new ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());
        interceptors = interceptorList.iterator();

===================================
action创建过程大致分析完毕。
待补充的内容
(1)objectFactory.buildAction的执行过程(struts2 & spring)
(2)action执行过程
  • 大小: 31 KB
  • 大小: 90.9 KB
分享到:
评论

相关推荐

    struts2源代码分析

    ActionProxy是Struts2中的一个重要组件,因为它封装了Action的实例化和调用过程。通过ActionProxy,开发者可以实现更复杂的逻辑,如动态Action映射或延迟加载Action。 Struts2的视图组件被封装在`org.apache.struts...

    struts2部分源码分析

    总的来说,Struts2的源码分析涉及Action的创建与执行、Interceptor的调用链、FilterDispatcher的请求调度以及Result的展示机制。通过对这些关键组件的深入理解和代码研究,开发者可以更好地掌握Struts2框架,提高...

    Struts2 运行流程分析

    如果URL映射与Struts2配置文件中的Action配置相匹配,请求将被转发给Struts2框架。 2. **过滤器Dispatcher初始化**:在请求到达Action之前,它会通过一系列过滤器,其中最重要的是`StrutsPrepareAndExecuteFilter`...

    struts2源码分析总结

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

    struts2 in action 中文版 英文版 源代码 合集

    在深入学习Struts2的过程中,你需要掌握以下几个核心知识点: 1. **Action和结果**: Action是Struts2框架中处理用户请求的核心组件,它封装了业务逻辑。结果则定义了Action执行后的跳转目标,可以是另一个Action、...

    Struts2_Action学习笔记、通配符{1},{2}

    通过上述分析可以看出,Struts2提供了丰富的特性来支持Web应用程序的开发,尤其是通过Namespace和ActionMethod等机制来组织和管理Action,以及利用通配符配置来简化配置文件,大大提高了开发效率和维护性。

    测试struts2中action

    通过上述代码分析可以看出,Struts2框架中的Action是非常重要的组成部分,它负责处理用户的请求并返回相应的结果。对于Action的测试也是非常关键的,可以确保程序在各种情况下都能正常运行。在实际开发中,开发者...

    Struts In Action

    通过分析这些war文件,读者可以学习到如何构建实际的Web应用,包括Struts的配置、Action的编写、表单处理以及与其他技术(如 Velocity 模板引擎)的集成。这些实践案例对深入理解和掌握Struts框架非常有帮助。

    Struts2拦截器原理分析

    2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...

    过滤器 Struts2全局变量 action转化do

    7. **源码分析**:深入理解Struts2框架的工作原理,可以查看其源码,特别是FilterDispatcher(或StrutsPrepareAndExecuteFilter)的实现,了解请求如何被拦截、Action如何被映射以及结果如何被返回。 8. **工具**:...

    Struts2 In Action

    本书通过详实的案例分析与实践指导,帮助读者全面掌握Struts2这一现代Web应用框架的核心概念和技术细节。 #### 描述:“Struts2 In Action完整版,购买原版英文书后获得电子版本,大家共享” - **分享价值**:这...

    struts2 项目源码

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

    Struts In Action(英文)

    Struts是一个开源的Java Web应用程序框架,它基于Model-View-Controller(MVC)设计模式,旨在简化开发过程,提高代码的可维护性和可扩展性。这本书详细介绍了如何使用Struts构建高效、健壮的企业级Web应用。 书中...

    struts2讲义

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,用于简化Java Web应用程序的开发过程。与传统的Java Web开发相比,Struts2提供了更为简洁和高效的开发方式。 ##### 1.2 Struts2与Struts1的...

    struts2框架源码分析及问题汇总

    Struts2是一个强大的Java web应用程序开发框架,它基于MVC(Model-View-Controller)设计模式,极大地简化了创建功能丰富的、交互式的Web应用的过程。本文将深入剖析Struts2的源码,揭示其工作原理,并汇总常见问题...

    struts2 in action

    Xmind文件《struts2 in action.xmind》可能是作者或读者为整理Struts2知识点创建的思维导图,可能包含框架的主要概念、重要类库、关键配置元素以及学习路径等。这样的思维导图可以帮助学习者更直观地理解和记忆...

    struts2-core-2.0.11源码

    2. **配置管理(Configuration Manager)**:Struts2通过`org.apache.struts2.config`包中的类来管理配置信息,包括XML配置文件和注解配置,这些类解析配置并创建Action和Interceptor实例。 3. **Action上下文...

    struts2原理分析 最新版 最全面

    ### Struts2原理分析 #### 一、Struts2架构概览 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。它将Web应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,...

    Struts2+技术内幕——深入解析Struts2架构设计与实现原理

    在源码分析部分,你将了解到Struts2如何解析HTTP请求,如何通过ActionMapper定位Action,ActionProxy是如何创建并执行Action的,以及RequestProcessor的角色。通过阅读源码,开发者能更深入地理解Struts2的工作原理...

Global site tag (gtag.js) - Google Analytics