要说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的执行机理的更多相关文章

  1. Android之键盘监听的执行机理【看清键盘监听的本质】【入门版】

    以EditText为例: 1.Activity本身也有按键监听 editText按键监听与Activity按键监听关系: Activity本身也有按键监听 并且分按下和松开两个事件监听 editTex ...

  2. Struts1的基础知识

    struts1.0的配置 在web.xml文件中的配置 <servlet> <!--配置ActionServlet类,一启动就创建该类对象--> <servlet-nam ...

  3. javascript预编译和执行过程总结

    javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块 ...

  4. sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

    写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...

  5. struts 拦截器 Interceptor

         拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用.正如上面 Struts2的Reference中讲述的,Stru ...

  6. hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

    三态的基本概念: 1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...

  7. hibernate在持久对象的生命周期(三州:自由状态,持久状态,自由状态 之间的转换)

    三种状态的基本概念: 1.  临时身份(Transient):也被称为自由状态,它只存在于内存中,并且在数据库中没有相应的数据. 使用new创建的对象,久化,没有处于Session中,处于此状态的对象 ...

  8. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  9. LEAPMOTION开发UI专题(1)

    非常 抱歉的是,之前说的LEAP/UI框架设计可能仅仅有两篇 由于个人时间实在是不同意 这个问题假设展开去写的话 那么说写本书都是不为过的 且由于内容改动非常是杂乱 所以我第一篇文章用来介绍LEAP预 ...

随机推荐

  1. 论文笔记:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks DeepLearning 》

    一.Abstract综述 训练出一个CNN可以同时实现分类,定位和检测..,三个任务共用同一个CNN网络,只是在pool5之后有所不同 二.分类 这里CNN的结构是对ALEXNET做了一些改进,具体的 ...

  2. 神奇的矩阵(bzoj 2396)

    Description 给出三个行数和列数均为N的矩阵A.B.C,判断A*B=C是否成立. Input 题目可能包含若干组数据.    对于每组数据,第一行一个数N,接下来给出三个N*N的矩阵,依次为 ...

  3. 回文串(bzoj 3676)

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...

  4. 【CF1073C】Vasya and Robot(二分,构造)

    题意:给定长为n的机器人行走路线,每个字符代表上下左右走,可以更改将一些字符改成另外三个字符,定义花费为更改的下标max-min+1, 问从(0,0)走到(X,Y)的最小花费,无解输出-1 n< ...

  5. 在SQL Server中使用NewID()随机取得某行

    原文发布时间为:2008-09-24 -- 来源于本人的百度文章 [由搬家工具导入] 这里提供了另外一个更有用的函数:NewID(),它返回一个GUID(全局唯一标志符) select top 10 ...

  6. 搞定vim的窗口操作

    最近在给学生演示数据结构代码时,发现用一般的方法总会有不方便,如果使用ide又觉得太浪费了,后来觉得用vim就够了,使用buffer总会需要页面调来跳出,学生看起来容易迷糊.所以就研究了下vim的窗口 ...

  7. usb 2.0 支援的速度

    from http://www.usb.org/developers/docs/usb20_docs/ high speed : 480 Mb/s full speed : 12 Mb/s low s ...

  8. IPC最快的方式----共享内存(shared memory)

    在linux进程间通信的方式中,共享内存是一种最快的IPC方式.因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限 ...

  9. hdu 3879 hdu 3917 构造最大权闭合图 俩经典题

    hdu3879  base station : 各一个无向图,点的权是负的,边的权是正的.自己建一个子图,使得获利最大. 一看,就感觉按最大密度子图的构想:选了边那么连接的俩端点必需选,于是就以边做点 ...

  10. hdu 3579(中国剩余定理+考虑0)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...