`
韩悠悠
  • 浏览: 840678 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struts源码之一

 
阅读更多

Struts2架构图



 

Struts2部分类介绍

这部分从Struts2参考文档中翻译就可以了。

ActionMapper

        ActionMapper其实是HttpServletRequestAction调用请求的一个映射,它屏蔽了Action对于Requestjava Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapperActionMapper很大的用处可以根据自己的需要来设计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

3FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action

4、如果ActionMapper决定调用某个ActionFilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行

5ActionProxy根据ActionMappingConfigurationManager找到需要调用的Action

6ActionProxy创建一个ActionInvocation的实例

7ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用

8Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现,不知道其它还有什么方式?

 

---------------------------------------

简单说明

    //1,在ConfigurationManager里面有ConfigurationProvider,ConfigurationManager管理有哪些读取配置文件的方式,

    //2,ConfigurationManager引用 ConfigurationProvider,由ConfigurationProvider来完成,读取方式

    //3,默认的读取方法俩个,一个是读取容器配置,一个是读取包配置,分别是XWorkConfigurationProviderXmlConfigurationProvider

    //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类引用俩个重要的类,ContainerClassLoaderObjectFactory返回对象ClassLoader类加载器创建对象或者通过Container容器的依赖注入返回对象

    //11,ActionInvocation是一个接口,核心方法有getAction(),ActionContext getInvocationContext(), ActionProxy getProxy()等,具体的实现类是DefaultActionInvocation

    //12,DefaultActionInvocation类中,初始化的时候通过ActionProxy中的ActionConfiggetInterceptors()方法创建interceptorList

    //并且初始化ActionContext,设置ActionInvocation为当前ActionInvocation,

    //使用objectFactory创建了action,具体的实现是通过类加载器创建的action,创建完成后在ActionEventListener中加入事件信息。

    //13,然后在invoke中循环interceptorList信息返回InterceptorMapping,其中InterceptorMapping包含了Interceptor和它所对应的名字。

    //然后调用Interceptorintercept方法(这里有多个Interceptor是之前通过ActionConfig读取到的)

    //14然后调用invokeAction方法,通过反射得到方法名,然后通过反射调用方法。

    //ActionContext作为整个action请求上下文容器而存在。ActionContext通过ThreadLocal定义,确保线程安全。

    //15,ServletActionContext继承了ActionContext,并提供了取得request,responsehttp信息,这些信息是通过ValueStack取得的。

 

  • 大小: 147 KB
分享到:
评论

相关推荐

    struts2源码最新

    该框架自2005年发布以来,经过多次更新迭代,成为了Java社区中广泛使用的Web应用框架之一。最新版的Struts2源码可以从GitHub的Apache官方仓库获取,这为我们提供了深入理解其内部工作原理和定制功能提供了可能。 ...

    struts-1.2.9源码

    Struts是Apache软件基金会下的一个开源项目,是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts 1.2.9是该框架的一个较早版本,它在当时被广泛用于构建企业级Web应用程序。源码分析可以...

    struts2源码分析总结

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

    Struts 源码学习之ActionServlet

    本文旨在深入剖析Struts框架的核心组件之一——`ActionServlet`的工作原理及其配置过程,帮助读者更好地理解Struts框架的内部机制。 #### 二、ActionServlet概述 `ActionServlet`是Struts框架中的关键组件,负责...

    struts-2.3.15.3源码

    Struts 2的安全性是其关注的重点之一。然而,历史上Struts 2曾出现过一些安全漏洞,例如著名的CVE-2017-9805,这是一个远程代码执行漏洞,影响了许多使用Struts 2的应用程序。因此,保持框架及依赖库的更新至关重要...

    struts2-core-2.0.11源码

    1. **拦截器(Interceptors)**:Struts2的核心特性之一,拦截器负责在Action调用前后执行额外的逻辑,如日志记录、权限验证等。在`org.apache.struts2.interceptor`包下,你可以找到各种预定义的拦截器类。 2. **...

    struts2.0 经典书籍 源码 标签学习合集

    3. **拦截器(Interceptors)**:Struts2.0的核心特性之一,用于在Action执行前后执行自定义逻辑,如日志记录、权限验证等。了解拦截器的工作原理和配置是必不可少的。 4. **Action与结果(Actions and Results)**...

    Struts2文件上传源码

    在Struts2中,文件上传是常见的功能之一,尤其是在处理用户提交表单时,比如上传图片、文档等。本文将详细讲解Struts2文件上传的实现原理以及源码分析。 首先,理解文件上传的基本流程。当用户通过HTML表单选择文件...

    struts2.0核心源码包

    1. **Action**:Action是Struts2的核心组件之一,它是业务逻辑的执行者。每个Action类对应一个用户请求,处理请求并返回结果。Action接口和ActionSupport类是实现Action功能的基础。 2. **Interceptor**:拦截器是...

    Struts源码和帮助文档

    Struts是Apache软件基金会下的一个开源框架,主要应用于Java Web应用程序的开发,它提供了一种组织应用程序的方式,便于实现MVC...无论是初学者还是经验丰富的开发者,这个包都将为你的Struts之旅提供有力的支持。

    struts+hibernate+spring源码

    学习Struts源码可以帮助理解其工作流程,例如请求是如何被路由的,以及如何通过ActionSupport类实现业务逻辑。 **Hibernate框架源码解析:** Hibernate作为强大的ORM框架,它的源码涵盖了Entity、Session、...

    MVC框架struts1.2.9源码

    Struts1.2.9是Apache软件基金会的一个开源项目,它是Model-View-Controller(MVC)设计模式在Java Web应用程序中的实现。这个框架的主要目标是简化开发过程,提高代码组织性和可维护性,使开发者能够更高效地构建...

    完整的Struts2源码

    - Struts2的拦截器机制是其强大之处,它允许在Action执行前后插入自定义逻辑,如权限检查、日志记录、数据校验等。常见的内置拦截器有`ParamsInterceptor`(参数绑定)、`ValidationInterceptor`(表单验证)、`...

    struts源码学习.pdf

    - **概述**:`RequestProcessor`类在Struts架构中扮演着核心角色之一,主要作为`ActionServlet`的助手类。`ActionServlet`的主要功能通过`RequestProcessor`类实现,尤其是在处理HTTP请求时。 - **职责**:处理...

    struts hibernate开发的BBS源码.rar

    "站长源码下载 - 网站源码,网站下载,站长工具,源码之家.url"可能指向一个收集各种网站源码的资源站,而"800小说下载,电子书下载,免费txt小说下载网.url"和"bbs_s"可能是其他不相关的下载链接或部分源码文件。...

    Struts2源码下载

    2. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它允许我们在Action执行前后插入自定义的逻辑。例如,日志记录、权限验证、性能监控等都可以通过拦截器实现。 3. **Dispatcher Servlet(前端控制器...

    spring2.0源码 struts1.2源码

    Struts是Apache软件基金会的一个项目,是最早的Java Web MVC框架之一。Struts 1.2 版本改进了ActionServlet、Tiles和国际化支持。 1. **Model-View-Controller(MVC)**:Struts 1.2 实现了MVC设计模式,将业务逻辑...

    Struts2 src 源码下载

    Struts2是一款基于MVC设计模式的Java Web框架,它为开发者提供了构建应用程序的强大工具,提高了开发效率并简化了Web应用的...对于想要学习或进阶Java Web开发的人员来说,研究Struts2的源码是一个非常有价值的实践。

    struts2源码,spring源码

    2. **Interceptor**:拦截器是Struts2的核心特性之一,它允许开发者插入自定义的处理逻辑在Action调用前后,例如日志记录、权限检查等。 3. **Result**:Result是视图渲染的机制,它可以将Action执行后的结果导向...

    commons-digester-1.8-src 下载 struts源码 digester

    Struts使用Apache Commons Digester作为其核心组件之一,负责处理配置文件(通常是struts-config.xml),将配置信息转换为运行时的对象结构。Struts通过使用Digester,可以将XML配置文件中的元素和属性映射到...

Global site tag (gtag.js) - Google Analytics