部分博客,,先后实施了Struts抽样。现在我们来分析这个样本。具体解释Struts1。

Struts1的几个核心组件是值得我们注意的:

(1)ActionServlet(核心控制器)。

(2)ActionForm(接收页面中传过的数据)。

(3)Action(是控制器,主要是从ActionForm中接收页面传进来的数据,然后进行逻辑处理)。

(4)ActionForward(页面跳转。跳转到jsp组件)。

(5)ActionMapping(配置每一个Action所相应的映射关系)。

详细的工作流程例如以下:

(1)ActionServlet是在web.xml中配置的一个自己主动启动项。

当webserver启动时,也就同一时候实例化了 ActionServlet类,ActionServlet会去初始化struts-config.xml的配置信息,并将其载入到内存中。去实例化action-bean。actionform等对象。

(2)当ActionServlet接收到来自client的请求时,就会去检索和去请求相匹配ActionMapping实例,假设没有找到则返回500错误.

(3)假设找到了就检查相应的ActionForm实例是否存在 a、假设存在,先把该实例相关数据reset清空一下。然后就把用户提交的表单数据填充到ActionForm 实例中. b、假设不存在。就创建一个ActionForm对象,再把用户提交的表单数据填弃到ActionForm实例中

(4)接着,再依据配置。看看是否要对表单进行验证(validate),假设须要验证,则调用ActionForm的 validate()方法对表单进行验证。a、假设验证没通过。则返回错误信息。 b、假设不须要验证。或者须要验证但validate方法返回null或者是返回一个不包括ActionMessage的ActionErrors对象的话。表明验证成功。

(5)ActionServlet依据ActionMapping实例所包括的映射信息决定将请求发送给哪个Action,假设相应的   Action实例不存在,则创建该Action的实例,然后调用该Action的execute()方法

(6)运行完Action实例的execute()方法后,该方法会返回一个ActionForward对象。

(7)ActionServlet再把client发过来的请求。转发给ActionForward对象所指向的JSP组件。

(8)ActionForward所指向的JSP组件再生成动态网页,送回给client。

Struts1与传统MVC有什么差别呢?

传统MVC(Model2)中:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFuZGFuem1j/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

MVC设计模式中。先由客户发送HTTP请求,控制器Servlet会接收用户发送的全部请求。然后Servlet调用javabean。将显示结果通过JSP页面进行显示。

传统MVC和Struts对比:

总结:

struts1中,依旧存在servlet(控制器)。但这个时候却是ActionServlet。由struts-config.xml配置文件控制,action就相当于MVC中一个个的servlet,由Action调用javabean完毕一个个详细的操作业务。

Struts1比传统的MVC模式多了三个组件。即标签库,ActionForm和Action,关于Struts1和MVC的关系。我感觉MVC是一个标准。而Struts1是实现。MVC像一个接口,struts1实现了这个接口。

版权声明:本文博主原创文章。博客,未经同意不得转载。

【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例的更多相关文章

  1. 12.Linux软件安装 (一步一步学习大数据系列之 Linux)

    1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...

  2. (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...

  3. (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...

  4. Java 学习第一步-JDK安装和Java环境变量配置

    Java学习第一步——JDK安装及Java环境变量配置 [原文]  2014-05-30 9:09  Java SE  阿超  9046 views Java作为当下很主流的编程语言,学习Java的朋 ...

  5. 软技能:十步学习法 (zhuan)

    http://www.gyzhao.me/2016/11/07/Ten-Step-Learning-Method/ ****************************************** ...

  6. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  7. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  8. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  9. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

随机推荐

  1. EXE文件结构和读取方法

    一.EXE文件概念 EXE File英文全名executable file .译作可运行文件,可移植可运行 (PE) 文件格式的文件,它能够载入到内存中.并由操作系统载入程序运行,是可在操作系统存储空 ...

  2. 添加xml文件编辑语法提示

    找到Struts的lib目录 找到struts2-core-文件并解压开 这个struts.dtd文件才是我们需要添加的文件 双击XML Catalog 点击ADD Key中复制粘贴D:\web\st ...

  3. WPF 3D: MeshGeometry3D纹理坐标的正确定义

    原文 WPF 3D: MeshGeometry3D纹理坐标的正确定义 为了使基于2D的纹理显示在3D对象中,我们必须定义3D Mesh对象的纹理贴图坐标.在WPF中,此项功能则通过MeshGeomet ...

  4. 标准I/O缓冲:全缓冲、行缓冲、无缓冲

    说明:我仅仅对网络资源进行了整合,方便学习-.- 基于流的操作终于会调用read或者write函数进行I/O操作.为了使程序的执行效率最高,流对象一般会提供缓冲区,以降低调用系统I/O库函数的次数. ...

  5. WPF中对三维模型的控制

    原文:WPF中对三维模型的控制 (以下选自南开大学出版社出版的<WPF和Silverlight教程>) 3Dmax中的建模模型可以导出为obj文件格式,将此文件导入WPF项目中,由WPF完 ...

  6. mysql计算指定的时间TPS

    <pre name="code" class="sql">有朋友留言,需要监视如早晨在规定时间内9设置18分TPS,写一个10在几秒钟内TPS方法. ...

  7. Agile/CMMI/Scrum

    Agile/CMMI/Scrum 一.背景介绍 在朋友(aehyok)的建议下,初步去了解Visual Studio Online,简称VS Online(即原来的 Team Foundation S ...

  8. 房费制 之 登录BUG

    声明:以下内容只有当你登录到一个username同时,学生不能申请多次登录.         说是BUG,事实上这也不是一个BUG,仅仅是想出一个办法,解决一个大家好多人都没有解决的问题.以下就给大家 ...

  9. 【从翻译mos文章】不再用par file如果是,export or import 包含大写和小写表名称表

    不再用par file如果是,export or import 包含大写和小写表名称表 参考原始: How to Export or Import Case Sensitive Tables With ...

  10. PHP制作pdf文档方法

    原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...