首先加载web.xml的时候会一个找到一个strutsPrepareandExecuteFilter过滤器文件
1.创建一个初始化操作对象,他封装了一些初始化的操作
2.然后就是封装了一些配置过滤器的对象
3.通过filterConfig 初始化内部的struts的记录日记
4.初始化默认的属性信息,创建一个对象分发器 为 将一个struts代替xwork ConfigurationManager 加入一个默认的提供者 在这里初始化真正的开始 在dipatcher 里面初始化一系列的属性文件如properties和configuration manager等,
如果你没有配置其他的xml文件,他就会
接着就加载struts2中默认的struts.xml和struts-default.xml的配置文件,它可以支持xwork的xml文件,这是一个向上兼容的特点,还有加载了配置文件的提者一起加载进来,然后去获取容器,这个容器就去得到Confiration的对象,
最后把初始化后的信息全部加入到一个容器当中去
然后将Dispcher再注入到容器当中。
init.initStaticContentLoader(config, dispatcher);
初始化静态的内容加载器
然后就是准备和执行,在这里用到了一个命令模式。
最后是清除初始化的操作对象,其中将ActionContext赋为null,在每一次来的时候都会有一个新的ActionContext对象。
doFilter()
在用户发送请求的时候,就通过FilterDispatcher拦截器所拦截,它会对用户的请求进行过滤,并给拦截的请求转交给ActionMapper去处理,由ActionMapper给请求交给doFilter方法去执行,
1.首先会设置一些编码问题他会首先去判断程序员是否设置多编码方式,如果没有设置也没有关系因为在struts2默认的编码是utf-8方式
2.创建一个ActionContext 它先在该方法中调用ThreadLocal类的get()方法,获取当前线程所对应的线程局部变量。并通过它的返回,实例化一个Dispatcher对象。因此Struts2框架为每一个线程都提供了一个Dispatcher对象,所以在编写Action的时候不需要考虑多线程的问题了。,在ActionMapping中他首先会判断是否有这个ActionContext对象没有就创建一个,有的话就去创建一个ValueStack的一个对象,这个对象是给用户的请求一个封装,将一些web对象如request,response,session等对象封装到ValueStack对象中
3.分配分发器
FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。(ActionMapper很大的用处可以根据自己的需要来设计url格式,)因为在这个ActionMapper 他封装了很多的action.
然后就是由一个容器来创建一个Actionproxy,因为一个容器他管理了这个代理工厂,这个代理工厂就会创建一个代理对象,
ActionProxy创建一个ActionInvocation的实例。
执行------------------------------------------------------------
在处理请求时是通过代理类来调用调度器,首先会调用调度类中的invoke方法,invoke方法先会执行所有的拦截器的interceptor方法(命令模式),在interceptor方法又会执行调度类中的invoke方法,在调度器内将所有需执行的拦截器都封装了进去,单执行调度器的时候,会循环的调度拦截器,并将调度器对象与 ActionContext对象都会传入拦截起,拦截器中通过ActionContext对象获数据进行处理,在处理后会通过调度起的对象去执行调度,这样就是将这一个拦截器放入了栈中一样,这样就会使得最先进去的会是最后执行完的,所以在这里他是将异常拦截器放在第一个执行的,然后是第一个入栈的所以到最后是最后一个执行完毕的,调度器是连接各个拦截器的中介者,这就是中介者模式,拦截器的在执行中会调用调度器,使其对下一个拦截器执行,这样就形成了链的形式,样做的好处就是对异常的处理,执行的控制,拦截器之间的
不相不知道,这样大大的减少了他们之间的耦合度,在这些拦截器中,提供了一个接口注入拦截器,struts2提供了实现接口通过接口注入的放入注入参数,这样就可以在action中获取想要的参数了。
Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,比如说一些监听之类的。
ActionInvocation负责根据配置找到对应的返回结果
分享到:
相关推荐
Struts2 源码分析 Struts2 是一个基于MVC 模式的Web 应用程序框架,它的源码分析可以帮助我们更好地理解框架的内部机制和工作流程。下面是Struts2 源码分析的相关知识点: 1. Struts2 架构图 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. 学习...