Struts2架构图
Struts2部分类介绍
这部分从Struts2参考文档中翻译就可以了。
ActionMapper
ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等java Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的实现,具体可以参考文档的docs\actionmapper.html。
ActionProxy&ActionInvocation
Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的。
ConfigurationProvider&Configuration
ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析,
Struts2请求流程
1、客户端发送请求
2、请求先通过ActionContextCleanUp-->FilterDispatcher
3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行
5、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类
6、ActionProxy创建一个ActionInvocation的实例
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现,不知道其它还有什么方式?
---------------------------------------
简单说明
//1,在ConfigurationManager里面有ConfigurationProvider,ConfigurationManager管理有哪些读取配置文件的方式,
//2,ConfigurationManager引用 ConfigurationProvider,由ConfigurationProvider来完成,读取方式
//3,默认的读取方法俩个,一个是读取容器配置,一个是读取包配置,分别是XWorkConfigurationProvider和XmlConfigurationProvider
//4,具体的读取配置文件是Configuration接口定义的,由Configuration的实现类DefaultConfiguration去读取ConfigurationManager所包含的ConfigurationProvider
//5,ActionConfig具体定义了一个action的配置信息,有类名,包名,方法名,以及请求URL等,请求URL封装在Location类中。还有很重要的interceptors也在这里,
//6,ActionConfig继承自Located,而Located又引用了Location,所以ActionConfig可以取得Action配置中的相关信息。
//7,如果配置找不到或者错误,就会出现我们常见的错误
//“ throw new ConfigurationException("Invalid method: " + method + " for action " + actionName);"
//8,ActionProxy的具体实现类是DefaultActionProxy,在DefaultActionProxy中包含了Configuration对配置文件的读取,ActionConfig相关action的映射信息。
//ActionInvocation具体action的处理,UnknownHandlerManager未知处理信息,ActionEventListener事件处理和ObjectFactory
//9,UnknownHandlerManager包含了Configuration接口的引用,实现类build方法将未知的请求信息通过Configuration接口读取放入Arraylist容器中
//如果容器Container中有未知信息,则通过container.getInstance方法返回未知信息放入Arraylist容器中
//10,ActionEventListener中只有俩个方法prepare(当action创建后触发事件)和handleException(发生异常时触发事件)
//ObjectFactory类引用俩个重要的类,Container和ClassLoader,ObjectFactory返回对象ClassLoader类加载器创建对象或者通过Container容器的依赖注入返回对象
//11,ActionInvocation是一个接口,核心方法有getAction(),ActionContext getInvocationContext(), ActionProxy getProxy()等,具体的实现类是DefaultActionInvocation
//12,在DefaultActionInvocation类中,初始化的时候通过ActionProxy中的ActionConfig的getInterceptors()方法创建interceptorList,
//并且初始化ActionContext,设置ActionInvocation为当前ActionInvocation,
//使用objectFactory创建了action,具体的实现是通过类加载器创建的action,创建完成后在ActionEventListener中加入事件信息。
//13,然后在invoke中循环interceptorList信息返回InterceptorMapping,其中InterceptorMapping包含了Interceptor和它所对应的名字。
//然后调用Interceptor的intercept方法(这里有多个Interceptor是之前通过ActionConfig读取到的)
//14然后调用invokeAction方法,通过反射得到方法名,然后通过反射调用方法。
//ActionContext作为整个action请求上下文容器而存在。ActionContext通过ThreadLocal定义,确保线程安全。
//15,ServletActionContext继承了ActionContext,并提供了取得request,response等http信息,这些信息是通过ValueStack取得的。
- 大小: 147 KB
分享到:
相关推荐
该框架自2005年发布以来,经过多次更新迭代,成为了Java社区中广泛使用的Web应用框架之一。最新版的Struts2源码可以从GitHub的Apache官方仓库获取,这为我们提供了深入理解其内部工作原理和定制功能提供了可能。 ...
Struts是Apache软件基金会下的一个开源项目,是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts 1.2.9是该框架的一个较早版本,它在当时被广泛用于构建企业级Web应用程序。源码分析可以...
本文将深入探讨Struts2的源码分析,特别是关于StrutsPrepareAndExecuteFilter的初始化过程,这是Struts2的核心组件之一,负责处理HTTP请求。 首先,我们来看`StrutsPrepareAndExecuteFilter`的初始化。这个过滤器...
本文旨在深入剖析Struts框架的核心组件之一——`ActionServlet`的工作原理及其配置过程,帮助读者更好地理解Struts框架的内部机制。 #### 二、ActionServlet概述 `ActionServlet`是Struts框架中的关键组件,负责...
Struts 2的安全性是其关注的重点之一。然而,历史上Struts 2曾出现过一些安全漏洞,例如著名的CVE-2017-9805,这是一个远程代码执行漏洞,影响了许多使用Struts 2的应用程序。因此,保持框架及依赖库的更新至关重要...
1. **拦截器(Interceptors)**:Struts2的核心特性之一,拦截器负责在Action调用前后执行额外的逻辑,如日志记录、权限验证等。在`org.apache.struts2.interceptor`包下,你可以找到各种预定义的拦截器类。 2. **...
3. **拦截器(Interceptors)**:Struts2.0的核心特性之一,用于在Action执行前后执行自定义逻辑,如日志记录、权限验证等。了解拦截器的工作原理和配置是必不可少的。 4. **Action与结果(Actions and Results)**...
在Struts2中,文件上传是常见的功能之一,尤其是在处理用户提交表单时,比如上传图片、文档等。本文将详细讲解Struts2文件上传的实现原理以及源码分析。 首先,理解文件上传的基本流程。当用户通过HTML表单选择文件...
1. **Action**:Action是Struts2的核心组件之一,它是业务逻辑的执行者。每个Action类对应一个用户请求,处理请求并返回结果。Action接口和ActionSupport类是实现Action功能的基础。 2. **Interceptor**:拦截器是...
Struts是Apache软件基金会下的一个开源框架,主要应用于Java Web应用程序的开发,它提供了一种组织应用程序的方式,便于实现MVC...无论是初学者还是经验丰富的开发者,这个包都将为你的Struts之旅提供有力的支持。
学习Struts源码可以帮助理解其工作流程,例如请求是如何被路由的,以及如何通过ActionSupport类实现业务逻辑。 **Hibernate框架源码解析:** Hibernate作为强大的ORM框架,它的源码涵盖了Entity、Session、...
Struts1.2.9是Apache软件基金会的一个开源项目,它是Model-View-Controller(MVC)设计模式在Java Web应用程序中的实现。这个框架的主要目标是简化开发过程,提高代码组织性和可维护性,使开发者能够更高效地构建...
- Struts2的拦截器机制是其强大之处,它允许在Action执行前后插入自定义逻辑,如权限检查、日志记录、数据校验等。常见的内置拦截器有`ParamsInterceptor`(参数绑定)、`ValidationInterceptor`(表单验证)、`...
- **概述**:`RequestProcessor`类在Struts架构中扮演着核心角色之一,主要作为`ActionServlet`的助手类。`ActionServlet`的主要功能通过`RequestProcessor`类实现,尤其是在处理HTTP请求时。 - **职责**:处理...
"站长源码下载 - 网站源码,网站下载,站长工具,源码之家.url"可能指向一个收集各种网站源码的资源站,而"800小说下载,电子书下载,免费txt小说下载网.url"和"bbs_s"可能是其他不相关的下载链接或部分源码文件。...
2. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它允许我们在Action执行前后插入自定义的逻辑。例如,日志记录、权限验证、性能监控等都可以通过拦截器实现。 3. **Dispatcher Servlet(前端控制器...
Struts是Apache软件基金会的一个项目,是最早的Java Web MVC框架之一。Struts 1.2 版本改进了ActionServlet、Tiles和国际化支持。 1. **Model-View-Controller(MVC)**:Struts 1.2 实现了MVC设计模式,将业务逻辑...
Struts2是一款基于MVC设计模式的Java Web框架,它为开发者提供了构建应用程序的强大工具,提高了开发效率并简化了Web应用的...对于想要学习或进阶Java Web开发的人员来说,研究Struts2的源码是一个非常有价值的实践。
2. **Interceptor**:拦截器是Struts2的核心特性之一,它允许开发者插入自定义的处理逻辑在Action调用前后,例如日志记录、权限检查等。 3. **Result**:Result是视图渲染的机制,它可以将Action执行后的结果导向...
Struts使用Apache Commons Digester作为其核心组件之一,负责处理配置文件(通常是struts-config.xml),将配置信息转换为运行时的对象结构。Struts通过使用Digester,可以将XML配置文件中的元素和属性映射到...