【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
部分博客,,先后实施了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示例的更多相关文章
- 12.Linux软件安装 (一步一步学习大数据系列之 Linux)
1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...
- (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性
转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...
- (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目
转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...
- Java 学习第一步-JDK安装和Java环境变量配置
Java学习第一步——JDK安装及Java环境变量配置 [原文] 2014-05-30 9:09 Java SE 阿超 9046 views Java作为当下很主流的编程语言,学习Java的朋 ...
- 软技能:十步学习法 (zhuan)
http://www.gyzhao.me/2016/11/07/Ten-Step-Learning-Method/ ****************************************** ...
- 一步一步学习SignalR进行实时通信_1_简单介绍
一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...
- 一步一步学习SignalR进行实时通信_8_案例2
原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...
- 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序
原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...
- 一步一步学习SignalR进行实时通信_7_非代理
原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...
随机推荐
- Windows Phone开发(10):常用控件(上)
原文:Windows Phone开发(10):常用控件(上) Windows Phone的控件有几个来源,和传统的桌面应用程序开发或Web开发一样,有默认提供的控件和第三方开者发布的控件.一般而言,如 ...
- iOS开展-Xcode技巧总结(持续更新)
1. <LLDB调试命令初探> 2. <Xcode LLDB Debug教程> 3. <iOS开发准备篇-(5)Xcode调试技巧_1> 4. <iOS开发准 ...
- Ubuntu下hadoop2.4搭建集群(单机模式)
一 .新建用户和用户组 注明:(这个步骤事实上能够不用的.只是单独使用一个不同的用户好一些) 1.新建用户组 sudo addgroup hadoop 2.新建用户 sudo adduser -in ...
- 如何自动以管理员身份运行.NET程序?
原文:如何自动以管理员身份运行.NET程序? windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身 ...
- 【Swift】学习笔记(一)——熟知 基础数据类型,编码风格,元组,主张
自从苹果宣布swift之后,我一直想了解,他一直没有能够把它的正式学习,从今天开始,我会用我的博客来驱动swift得知,据我们了解还快. 1.定义变量和常量 var 定义变量,let定义常量. 比如 ...
- Mongoose即使是简单的表查询
从我原来的博客尖,欢迎大家光临 http://www.hacke2.cn 像我这篇文章所说的基于Node.js + jade + Mongoose 模仿gokk.tv.当时停止开发是由于我深深的感觉到 ...
- ios ios7 取消控制拉升
//推断是否ios7 取消控制拉升 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0) { self.edgesFo ...
- 高级项目 它 集群环境建设(两)MySQL簇
最后博文我们介绍一下相关概念集群,今天我们要介绍的博文MySQL相关内容集群. 1.MySQL集群简单介绍 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MyS ...
- Blend4精选案例图解教程(四):请给我路径指引
原文:Blend4精选案例图解教程(四):请给我路径指引 路径在界面设计中,可以起到很好的辅助作用,我常常使用它来对元素进行规则排列和非规则排列控制. 本次教程将演示,Blend中路径的常规用法. 1 ...
- Java栈的实例-数组和链表两种方法(转)
一.栈 栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom). (2)当表中没有元素时称为空栈. ...