部分博客,,先后实施了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)中:

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实现了这个接口。

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

转载于:https://www.cnblogs.com/zfyouxi/p/4821402.html

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

  1. 一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

    目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者.本教程由 EntLib.com 团队编写.如有任何技术问题,欢迎留言. 电子版 – PDF ...

  2. 文献学习(part10)--元自步学习

    学习笔记,仅供参考,有错必究 从文献中按照本人的学习情况不完全摘录: 文章目录 元自步学习 摘要 课程学习与自步学习 自步学习的基本执行模式 自步学习简介 典型的自步学习算法 超参数优化 元自步学习算 ...

  3. 一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 - 强烈推荐!!!

    一步一步学习ASP.NET MVC 1.0创建NerdDinner 范例程序 本文根据<Professional ASP.NET MVC 1.0>中微软牛人Scott Guthrie 提供 ...

  4. 一步一步学习SignalR进行实时通信_6_案例

    原文:一步一步学习SignalR进行实时通信_6_案例一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 下 ...

  5. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  6. GitChat · 大数据 | 一步一步学习大数据:Hadoop 生态系统与场景

    目录(?)[-] Hadoop概要 Hadoop相关组件介绍 HDFS Yarn Hive HBase Spark Other Tools Hadoop集群硬件和拓扑规划 硬件配置 软件配置 Hado ...

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

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

  8. 一步一步学习SignalR进行实时通信_5_Hub

    目录 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 Hub封装好的常用方法 Hub常用方法解释 保持状态 前后台交互 结束语 参考文献 一步一步学习SignalR进行实时通 ...

  9. python之设计模式的装饰器9步学习

    在继承的基础上增加新功能,重载,重写区别 装饰器: 函数a说,我是装饰器啊,其他哪个函数顶着我,我就吃了谁,然后吐出来我的和你的返回结果 testng的UI自动化,@beforetest,@befor ...

最新文章

  1. PPT插入文本框但是字体并不是想要的
  2. 如何制作一个通用的多系统安装U盘七(Windows相关配置)
  3. 编码时的一些普适原则
  4. mybatis-通用Mapper
  5. nginx php fpm 日志,nginx下php-fpm不记录php报错日志怎么办?
  6. body区域怎么传一个数组_自己轻松写一个jQuery库
  7. ltp-ddt的makefile结构
  8. [mock]10月4日
  9. (11)Spring框架----基于@AspectJ注解方式和基于XML配置方式开发AOP
  10. sql盲注 解决_SQL 盲注漏洞
  11. 西威变频器 服务器显示,西威变频器故障查询及操作方法;
  12. 【Git】Git报错:Branch ‘master‘ set up to track remote branch ‘master‘ from ‘orgin‘
  13. docker部署springboot工程
  14. 二进制与十进制转换的简单公式
  15. 突发!蚂蚁集团CEO宣布辞职,阿里方面表示属实!
  16. BLE_BQB Test_Stable Modulation Characteristics, uncoded data at 1 Ms/s_RF-PHY/TRM/BV-09-C
  17. .NET 中的 Encoding 编码
  18. Array in Python
  19. hp4411s vt168
  20. flutter插件进阶之手把手教你编写简易插件(五)

热门文章

  1. FFmpeg再学习 -- FFmpeg解码知识
  2. Java Graphics2D类的绘图方法
  3. IPFS: NAT traversal(NAT穿越)
  4. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章
  5. linux查看网卡传输,Linux下查看网卡实时流量工具
  6. bootstrap insertrow始终插入到最后一行_HBase put命令:插入数据
  7. 金蝶云星空操作手册_金蝶国际CFO林波谈云业务:金蝶云·星空预计今年可以实现盈利...
  8. pythonselenium获取html标签内容_python selenium 如何获取网页页面所有可以点击的元素?...
  9. 2020北京智源大会 图神经网络专题 总结
  10. uva1507(状态压缩+dfs)