要说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. 能量采集(bzoj 2005)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...

  2. cookie中存储json

    原文发布时间为:2009-12-14 -- 来源于本人的百度文章 [由搬家工具导入] http://www.denisdeng.com/?p=563 最近的一个项目需要在cookie中存储json对象 ...

  3. 【Chrome】Octotree Chrome插件离线安装

    插件下载地址:http://www.cnplugins.com/devtool/octotree/download.html Octotree 是国外程序员Buu Nguyen 做的一个 Chrome ...

  4. LeetCode OJ-- Longest Common Prefix

    https://oj.leetcode.com/problems/longest-common-prefix/ 在多个string的集合中,找出所有string的最长公共前缀. 从头开始 index ...

  5. ELK之filebeat替代logstash收集日志

    filebeat->redis->logstash->elasticsearch 官网下载地址:https://www.elastic.co/downloads/beats/file ...

  6. CodeForces - 361E Levko and Strings

    Discription Levko loves strings of length n, consisting of lowercase English letters, very much. He ...

  7. UVA 11389 The Bus Driver Problem 贪心水题

    题目链接:UVA - 11389 题意描述:有n个司机,n个早班路线和n个晚班路线,给每个司机安排一个早班路线和一个晚班路线,使得每个早班路线和晚班路线只属于一个司机.如果一个司机早班和晚班总的驾驶时 ...

  8. pt-query-digest 实践(转)

    mysql slowlog 使用与介绍 slow_query_log =1-----是否打开 slow_query_log_file = /data/mysql_data/node-1/mysql-s ...

  9. dedecms安装完成后登录后台出现空白

    今天家里的电脑上新装DEDE5.7后台登陆后竟然一片空白经过分析代码,发现登录验证的时候用到了这个函数session_register(我的环境:win7+PHP5.4.3+Apache2.2.22+ ...

  10. 修改Linux基本配置

    1.修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=server1.cn 2.修改ip地址 vi /etc/sysconfig/netw ...