深入了解Struts1的执行机理
要说Struts1的工作流程。就必需要说一下Model1和Model2了。由于这个框架是踏着他们的尸骨一步一步的发展起来的。
Model1开发模式,想想我们刚刚開始接触Java的时候,我们用的就是这样的模式了,一个jsp页面+处理业务逻辑JavaBean+负责处理数据的DaoBean。更有甚者,你能够在这里直接连接数据库获取数据。非常简单,非常好理解,开发起来速度足够快。没有繁琐的转换。非常easy上手,所以说要做一个小项目,使用Model1这样的开发模式,还是非常不错的选择。可是我们想象一下,假设说Jsp页面。纪要负责显示,还要负责业务逻辑,那么假设我们想更换一下的话,可想而知。我们要做的工作。将会是非常大的。另一个问题就是程序逻辑开发与页面设计纠缠在一起,既不便于分工合作也不利于代码的重用。这样的程序其健壮性和可伸缩性都不好。
Model 2引入了"控制器"这个概念,控制器一般由Servlet来担任,client的请求不再直接送给一个处理业务逻辑的JSP页面。而是送给这个控制器,再由控制器依据详细的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。
因此,这个servlet控制器为应用程序提供了一个进行前-后端处理的中枢。
一方面为输入数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点。还有一方面也提供了将业务逻辑从JSP文件剥离的可能。
业务逻辑从JSP页面分离后。JSP文件蜕变成一个单纯完毕显示任务的东西。这就是常说的View。而独立出来的事务逻辑变成人们常说的Model,再加上控制器Control本身,就构成了MVC模式。实践证明,MVC模式为大型程序的开发及维护提供了巨大的便利。
而Struts1能够说是Model2的一个增强版,来自客户的全部须要通过框架的请求。统一由ActionServlet接收(ActionServlet Struts已经为我们写好了。仅仅要您应用没有什么特别的要求,它基本上都能满足您的要求),依据接收的请求參数和Struts配置(struts-config.xml)中ActionMapping,将请求送给合适的Action去处理。解决由谁做的问题,它们共同构成Struts的控制器。 Action则是Struts应用中真正干活的组件。它解决的是做什么的问题,它通过调用须要的业务组件(模型)来完毕应用的业务,业务组件解决的是怎样做的问题。并将运行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。
这里要特别说明一下的是:就是Action这个类,它不应该包括过多的业务逻辑。而应该仅仅是简单地收集业务方法所须要的数据并传递给业务对象。实际上,它的主要职责是: 校验前提条件或者声明 调用须要的业务逻辑方法 检測或处理其它错误 路由控制到相关视图 。
我们来看一下Struts1的工作时的流程原理图!
相信通过看着一张图,加上前边的描写叙述,我们都能够非常清楚的了解了Struts1的工作流程及其执行机理!然后在跟大家说几点要注意的
ActionServlet是通过process()方法来处理所有逻辑的。
Aaction配置信息并非所有载入,而是找与截取的url相应的action配置信息,载入到ActionMapping中,也就是一个action相应一个ActionMapping。
ActionForm也并非每次都反射,而是会先推断一下request或者session中是否已经创建。假设没有。则创建一次。并保存在request或者session中。
Action处理类相同是先检查是否已经创建过。然后在操作。
并且struts1中的Action创建过程存在线程安全问题。
ActionServlet依据Action返回的ActionForward,调用processForwardConfig,进行页面导航。
深入了解Struts1的执行机理的更多相关文章
- Android之键盘监听的执行机理【看清键盘监听的本质】【入门版】
以EditText为例: 1.Activity本身也有按键监听 editText按键监听与Activity按键监听关系: Activity本身也有按键监听 并且分按下和松开两个事件监听 editTex ...
- Struts1的基础知识
struts1.0的配置 在web.xml文件中的配置 <servlet> <!--配置ActionServlet类,一启动就创建该类对象--> <servlet-nam ...
- javascript预编译和执行过程总结
javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块 ...
- sizeof、strlen、字符串、数组,整到一块,你还清楚吗?
写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...
- struts 拦截器 Interceptor
拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用.正如上面 Struts2的Reference中讲述的,Stru ...
- hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)
三态的基本概念: 1, 暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...
- hibernate在持久对象的生命周期(三州:自由状态,持久状态,自由状态 之间的转换)
三种状态的基本概念: 1. 临时身份(Transient):也被称为自由状态,它只存在于内存中,并且在数据库中没有相应的数据. 使用new创建的对象,久化,没有处于Session中,处于此状态的对象 ...
- 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼
1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...
- LEAPMOTION开发UI专题(1)
非常 抱歉的是,之前说的LEAP/UI框架设计可能仅仅有两篇 由于个人时间实在是不同意 这个问题假设展开去写的话 那么说写本书都是不为过的 且由于内容改动非常是杂乱 所以我第一篇文章用来介绍LEAP预 ...
随机推荐
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
本文转自:http://www.cnblogs.com/TenosDoIt/p/3675788.html 题目链接 Given a string S, find the longest palindr ...
- apache 列目录修复
描述 :Apache默认配置时允许目录浏览.如果目录下没有索引文件,则会出现目录浏览,导致文件信息泄漏. 检测方法:直接访问目录,如果能看到目录下的文件信息,则说明存在目录浏览漏洞 加固方法: 1 ...
- system权限无法访问外挂SD卡
总结Android应用system权限无法访问SD卡问题 包括android1.6 解决方案http://hi.baidu.com/yunlongchn/item/7d6636d8547317ffca ...
- CF126B password&&HDU 4763 Theme Section
http://acm.hdu.edu.cn/showproblem.php?pid=4763 http://codeforces.com/problemset/problem/126/B 这两个题都是 ...
- [SaltStack] 基础介绍
今天有时间把以前研究过的saltstack梳理总结下 -:) salt是干什么的我就不多说了, 大家Google下资料很多的, 简单来说就是func+puppet: 配置文件管理 远程命令调用 Cro ...
- 学习总结——Postman做http接口功能测试
Postman做各种类型的http接口测试 首先,做接口测试前要有明确的接口文档(e.g. http://test.nnzhp.cn/wiki/index.php?doc-view-59) ,假设已经 ...
- uva 11491:Erasing and Winning(贪心)
题意:给一个长n(n<10^5)位的数,删除d位,求删除后最大的数.(原数无前导0) 思路:从前往后扫,如果a[i] > a[i-1],则删除a[i-1].我暴力的用链表实现了…… #in ...
- LeetCode OJ--Anagrams **
https://oj.leetcode.com/problems/anagrams/ 在一个vector<string>中,找到所有经过顺序变换,可以变成一样的 string. 首先,对每 ...
- json.net(Json.NET - Newtonsoft)利用动态类解析json字符串
将对象转换为字符串很简单,唯一要注意的点就是为了避免循环要在需要的字段上添加jsonignore属性.可以参照这篇博文:http://www.mamicode.com/info-detail-1456 ...
- [深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心)
[深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心) 配合阅读: [深度概念]·Attention机制概念学习笔记 [TensorFlow深度学习深入]实战三·分别使用 ...