原理:
来自客户的所有请求,统一由Struts框架中的中心控制器ActionServlet接收,根据接收的请求参数和Struts配置(struts-config.XML)中ActionMapping,将请求送给合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。
Action则是Struts应用中真正干活的组件,它解决的是做什么的问题,它通过调用需要的业务组件来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。
需要注意的是Action这个类,不应该包含过多的业务逻辑,而应该只是简单地收集业务方法所需要的数据并传递给业务对象。它的主要职责是:校验前提条件或者声明;调用需要的业务逻辑方法;检测或处理其他错误;路由控制到相关视图。真正的业务逻辑应该放到下一层的Model中处理。
原理示意图:

工作流程细节:
首先看web.xml中Struts的配置
细节步骤:
(1)加载配置信息
Web容器(如Tomcat)启动时,通过web.xml的<struts>标签判断Struts的存在,web应用启动时就通过<strvlet-class>标签加载、初始化ActionServlet,struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时ActionServlet会读取配置文件struts-config.xml的配置信息,为struts中不同的模块初始化相应的对象。当ActionServlet接收到一个客户请求时,将执行如下流程:
(2)取得URL
Tomcat根据请求的路径格式判读是否使用Struts框架,本例中在web.xml中配置以do结尾则使用(如login.do以do结尾)。然后Tomcat通过<servlet-name>标签得到<servlet-class>的路径,调用ActionServlet的doGet()/doPost()方法,在doGet()/doPost()中调用process方法。
然后通过process调用到RequestProcessor类(这是一个核心控制类)中的processPath()方法来获取到请求的真正URL(例如login.do的到login)。如果不存在就返回请求路径无效信息;
(3)检索和用户请求匹配的ActionMapping,创建ActionForm
根据截取的URL调用processMapping(request, response, path)方法取得ActionMapping(根据struts-config.xml文件预先加载好的)。
然后根据得到的ActionMapping调用processActionForm(request, response, ActionMapping)方法,根据ActionMapping中name查找到ActionForm。
如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
然后通过调用processPopulate(request, response, form, mapping)方法将表单中的值设置到ActionForm对象中。
(4)验证表单
接着调用RequestProcessor类中的processValidate(request, response, form, mapping),看配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate(mapping, request)方法;
如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
(5)创建Action
接着调用RequestProcessor类中processActionCreate(request, response, mapping)方法,ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例。
(6)得到ActionForward,进行转向
接着调用RequestProcessor类中processActionPerform(request, response, action, form, mapping)执行查找到的用户自定义的Action中的execute()方法,Action一般只包含一个excute()方法,execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给
ActionForward对象指向的JSP组件。
服务器通过ActionForward对象进行转发工作。ActionForward对象指向JSP组件生成动态网页,返回给客户。
最后附上具体流程的时序图。关于Struts的几个重要对象将在下次具体介绍。

分享到:
相关推荐
Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂的组件交互与流程控制。本文将深入解析Struts2的工作流程,帮助开发者理解其核心机制。 ### 一、...
#### Struts1工作流程 1. **用户提交请求**:客户端向服务器发送HTTP请求。 2. **ActionServlet接收请求**:ActionServlet接收到请求后,根据`struts-config.xml`文件中的配置决定调用哪个Action来处理请求。 3...
### Struts1工作原理浅析 #### 引入Struts:从Model1到Model2的转变 在探讨Struts1的工作原理之前,我们先来理解一下Model1与Model2架构的区别,这有助于我们更好地理解Struts框架的核心价值。 **Model1架构**是...
根据提供的文件信息,“Struts框架原理图”主要阐述了Struts框架的工作原理、流程以及页面间的跳转机制。为了更好地理解和应用Struts框架,本文将深入解析这些关键知识点。 ### Struts框架概述 Struts是一个开源的...
ActionServlet 负责调用 Action 类,Action 类执行具体的业务逻辑,ActionMapping 和 ActionForward 定义了不同的业务逻辑路径和流程。ActionServlet 根据请求参数和配置信息,将请求转发到相应的 Action,Action ...
通过深入理解其工作原理和架构设计,开发者能够更好地利用Struts2来构建高效稳定的应用系统。同时,面对Struts2的一些不足之处,开发者也应该积极探索其他解决方案或技术栈,以适应不断变化的技术环境和发展需求。
Struts2的设计理念和工作流程与WebWork框架相似,可以认为Struts2是对WebWork的升级和扩展,吸收了WebWork的优点,同时改进了Struts1的一些不足,如更简洁的配置和更强大的动作映射。 8. **集成其他框架**: ...
以下是对Struts工作原理和流程的详细解释: ### Struts配置步骤 1. **导入Struts库**:在项目中引入Struts相关的jar包,这些库包含了Struts框架运行所需的所有组件。 2. **创建配置文件**:在`WEB-INF`目录下创建...
通过对这些文件的学习和分析,可以更深入地理解Struts2的工作流程和设计思想。 总之,Struts2是一个强大且灵活的MVC框架,它的工作原理涵盖了前端控制器、拦截器、Action、结果映射等多个关键组件,提供了高效、...
本文将深入探讨Struts1的基本原理,帮助理解其架构设计和工作流程。 **1. MVC架构** MVC模式是软件工程中一种用于分离业务逻辑、数据和用户界面的设计模式。在Struts1中,Model代表应用程序的数据和业务逻辑,View...
尽管它们都是Struts家族的一部分,但它们的工作原理和流程有着显著的区别。 **Struts1工作原理及流程** 1. **体系结构**:在Struts1中,核心控制器是`ActionServlet`,它负责处理HTTP请求,并根据`struts-config....
#### 二、Struts2的工作流程 **2.1 请求处理流程** 当用户向Web应用发送一个HTTP请求时,Struts2会按照以下步骤处理: 1. **FilterDispatcher**:这是Struts2框架的核心组件之一,负责接收并处理所有HTTP请求。...
### Struts2配置与工作原理详解 #### 一、Struts2概述 Struts2是Apache Struts项目下的一个开源框架,它继承了Struts1的一些特性,同时又结合了WebWork框架的优点,使得它在Java Web开发领域具有很强的竞争优势。...
### Struts 1.2 执行原理详述 #### Struts 框架概述 Struts 是 Apache 组织提供的一款开源的 MVC (Model-View-Controller) 架构实现框架,广泛...了解其核心执行流程对于深入理解 Struts 框架的工作机制至关重要。
### Struts简介与基本运作流程 #### 一、Struts简介 Struts 是一款用于构建企业级Java Web应用的开源框架,它遵循...通过深入理解其架构原理和运作流程,可以帮助开发者更好地利用Struts来提高开发效率和软件质量。
### Struts Framework 的工作原理与核心组件解析 #### 一、概述 Struts框架作为Java Web开发中的一个重要组成部分,自2000年初发布以来,便因其强大的功能和易用性而受到广泛欢迎。该框架主要针对MVC(Model-View-...
了解Struts的配置和工作原理,有助于开发者更有效地构建和维护Java Web应用,提高开发效率。在实际开发中,还需要掌握如何编写Action类、ActionForm、JSP页面以及配置文件,以实现特定的功能需求。
在文章"Struts2拦截器原理分析实例"中,作者通过一个具体的应用场景,展示了如何配置和使用拦截器来实现特定的功能,比如日志记录或权限验证。通过阅读这篇博客,我们可以更直观地理解拦截器的工作方式和价值。 ...
下面我们将详细解析Struts的工作原理和流程。 1. **初始化配置**: 当Web服务器启动时,根据`web.xml`配置文件,ActionServlet(Struts的总控制器)被加载并初始化。ActionServlet会读取`struts-config.xml`配置...
总结起来,Struts2框架通过FilterDispatcher作为核心控制器拦截和处理用户请求,使用Action和Interceptor实现业务逻辑和控制流,通过配置文件(struts.xml)管理Action的映射和结果,同时依赖ObjectFactory创建和管理...