这几天因为在项目中曾经使用过Struts2这个神奇的框架,所以很有必要深入探究一下Struts2的处理的基本流程,如是有大一大二的在校大学生看到这篇博客我像给你的建议是在大学只做一个项目就够了,把整个项目的所有模块都掌握清楚,把所用技术的内部实现原理都给琢磨透那么你的大学就很成功了。做项目一定要做完之后停下来思考揣摩获得提升不能只停留在框架的使用上面,当然一个框架流行也自有他的一些非常好的
实现原理。掌握这些才是在学习阶段最重要的。
下面这幅图在我第一次接触Struts2的时候就已经深深的烙在我的脑海中,但是至于他的内部实现,具体的流出我只是粗略的学习并没有深入研究,现在是时候开始认真总结一下了。
一、Struts2的处理流程:
- 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,FilterDispatcher主要是通过ActionMapper来决定需要调用那个Action,FilterDispatcher是控制器的核心,也是MVC中控制层的核心组建)。
- 核心控制器组建FilterDispatcher根据ActionMapper中的设置获得是否需要调用某个Action组建来处理这个HttpServletRequest请求,如果ActionMapper决定调用某个Action组建,FilterDispatcher核心控制器组建就会把请求的处理权委托给ActionProxy组建
- ActionProxy组建通过Configuration Manager组建获得Struts2框架的配置文件struts.xml,最后找到需要调用的目标Action组建类,然后ActionProxy组建就创建出一个实现了命令模式的ActionInvocation类的对象实例类的对象实例(这个过程包括调用Anction组建本身之前调用多个的拦截器组建的before()方法 )同时ActionInvocation组建通过代理模式调用目标Action组建。但是在调用之前ActionInvocation组建会根据配置文件中的设置项目加载与目标Action组建相关的所有拦截器组建(Interceptor)。
- 一旦Action组建执行完毕,ActionInvocation组建将根据开发人员在Struts2.xml配置文件中定义的各个配置项目获得对象的返回结果--为这个Action组建的结果码(一个像SUCCESS,INPUT)然后根据该返回的结果调用目标JSP页面以实现显示输出。
- 最后各个拦截器组建会被再次执行(但是顺序和开始时相反,并调用after()方法),然后请求最终被返回给系统的部署文件中配置的其他过滤器,如果已经设置了ActionContextCleanUp过滤器,那么FilterDispatcher就不会清理在ThreadLocal对象中保存的ActionContext信息。如果没有设置ActionContextCleanUp过滤器,FilterDispatcher就会清除掉所有的ThreadLocal对象。
更加清晰的来说就是:
1.客户端初始化一个指向servlet容器的请求。
2.请求经过一系列的过滤器(ActionContextCleanUp、SiteMesh)
3.FilterDispatcher被调用,并询问ActionMapper来决定这个请求是否需要调用某个Action
4.ActionMapper决定要调用那一个Action,FilterDispatcher把请求交给ActionProxy。
5. ActionProxy通过Configurate Manager询问Struts配置文件,找到要调用的Action类
6. ActionProxy创建一个ActionInvocation实例
7. ActionInvocation实例使用命令模式来调用,回调Action的exeute方法
8. 一旦Action执行完毕,ActionInvocation负责根据Struts.xml的配置返回结果。
二、比较重要的类的介绍:
ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,他屏蔽了Action对于Request等Java servlet类的依赖。Struts2中它的默认实现类是DefaultAtionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的具体实现。
ActionProxy和ActionInvocation:
Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是咱ActionInvocation中实现的。
ConfigurateProvider和Configuration
ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是实现XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。
结合上图Struts2的处理流程就已经能够非常清晰了
相关推荐
包含了struts2的处理流程以及struts2的配置文件,并附有处理流程显示图,更加清楚直观。
通过学习和实践这个Struts2框架程序示例,开发者可以深入理解Struts2的工作原理,掌握如何创建Action、编写Interceptor、配置Action与Result的映射,以及如何利用Struts2的其他特性来提高开发效率和代码质量。...
1. **Struts2框架概述**:Struts2是基于Model-View-Controller(MVC)设计模式的开源框架,它简化了Java Web应用程序的开发,提供了一种组织应用结构和控制业务逻辑的方式。Struts2继承了Struts1的优点,并吸取了...
Struts2框架是Java Web开发中的一个流行框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化和可扩展的方式来构建应用程序。此压缩包文件包含的是Struts2的源码,特别适合初学者研究和学习...
Struts2框架是一款基于MVC(Model-View-Controller)设计模式的开源Java Web应用程序框架,它极大地简化了Java Servlet API的使用,提高了开发效率。这个压缩包包含了两个不同版本的Struts2框架:struts2.0.11和...
Struts2是一个强大的MVC(Model-View-Controller)框架,它是Apache软件基金会下的一个开源项目,被广泛应用于Java EE应用程序开发中。Struts2框架是Struts1的升级版本,它结合了WebWork框架的优点,提供了更高效、...
Struts2框架的核心设计围绕着请求处理流程构建,其主要目标是简化Web应用的开发过程,提高代码的可维护性和可扩展性。当一个HTTP请求到达时,Struts2通过一系列精心设计的组件和流程,将请求转化为具体的业务逻辑...
Struts2 验证框架是基于 Java 语言的 Web 应用程序框架,提供了一个强大的验证机制,以确保用户输入的数据满足业务逻辑的要求。在 Struts2 中,验证机制是通过 validator 来实现的,该机制可以对用户输入的数据进行...
- **请求处理流程**:当用户请求到达时,Struts2的前端控制器会根据配置将请求交给相应的Action处理。 #### 二、Struts2框架搭建与配置 ##### 2.1 导入Jar包 - **下载Struts2的Jar包**:首先需要下载Struts2的库...
### Struts2框架概述 #### 一、Struts2的历史背景与起源 Struts2作为一款备受关注的企业级Web开发框架,在Java Web开发领域占据着举足轻重的地位。尽管Struts2声称自身是一个全新的框架,但从其发展历程来看,这种...
Struts2框架是一种基于Model-View-Controller (MVC)设计模式的Java Web应用程序开发框架。它由Apache软件基金会维护,旨在简化Web应用的开发流程,提供更好的控制和解耦,以及增强可测试性。在"学生信息查询系统"这...
Struts2框架是一个基于Model-View-Controller(MVC)设计模式的Java Web应用程序框架,由Apache软件基金会维护。这个框架极大地简化了开发过程,提高了可维护性和可扩展性。Struts2通过整合多种优秀框架,如Tiles、...
4. **结果类型**:Struts 2支持多种结果类型,如`dispatcher`、`chain`、`redirect`等,开发者可以根据需求选择合适的结果类型来控制流程。 5. **配置灵活性**:除了XML配置文件外,Struts 2还支持注解、Java配置等...
Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建高效、可扩展且易于维护的Web应用的工具和组件。这个压缩包包含了Struts2框架的基础jar包,这些库是...
Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用。这个“struts2小程序”很可能是开发者利用Struts2框架开发的一个小型项目,可能包含了基本的CRUD操作或其他特定功能。...
Struts2是一个强大的Java Web应用程序开发框架,它简化了MVC(Model-View-Controller)设计模式的实现,提供了一种组织代码结构、处理HTTP请求和响应、以及管理业务逻辑的方法。下面将详细介绍Struts2框架的搭建过程...
【基于Struts2框架的名片管理系统】是一种使用JavaEE技术栈构建的企业级应用程序,它旨在高效管理和存储名片信息。Struts2是ActionServlet的一种增强版本,是Java Web开发中的一个流行MVC(Model-View-Controller)...
Struts2框架是一个基于Model-View-Controller(MVC)设计模式的开源Java Web应用程序框架。它简化了Java Servlet API的使用,提供了处理HTTP请求、转发控制和视图渲染的能力。在这个简单的用户登录实例中,我们主要...
Struts2框架是Java开发Web应用的一个强大框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化且灵活的方式来构建应用程序。Struts2的出现是为了改进原有的Struts1框架,增加了更多的功能和...