struts 1.x 原理
Struts
当我接触到这个框架的时候。我就在想为什么是struts,而不是什么CraigFramework。结构、支撑,这样来理解也不难怪了。
为什么须要struts?
在struts in action这本书里,struts的开发人员也讲到。在有了MVC后依旧须要这样一个框架来支撑开发的工作。由于有了jsp和model和ejb来处理这一套流程还须要什么?详见下文
基本构件
如图是一个相对简洁的组件图,初始化页面。载入struts-config.xml(注:在默认情况中默觉得struts-config.xml,当然也能够自己定义相应的xml文件。更改后须要在xml文件里配置。)。取得form中的数据,提交到action中处理
返回到jsp。
原理
首先须要在tomcatserver启动,而tomcat启动后。
部署在tomcat中的项目启动,对应在依据项目下的web.xml文件来实例化struts的servlet;并加载struts-config.xml文件。
而后webclient向tomcat发出request后。实例化request以及response对象。假设是post提交就调用dopost方法,请求ActionServlet并调用doPost方法。
部分图解:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2ZsMjAxMjEzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1.截取url
在doPost方法中调用的process方法。通过一路艰辛传过来的request对象携带的url。通过RequestProcessor类中的processpath方法来截取url。
2.获取ActionMapping
截取得到的url再来通过RequestProcessor的processmapping来调用ModuleConfigImpl类来读取servlet-config.xml中的节点并将相应的数据设置到ActionMapping对象之中。
3.实例化ActionForm
在struts-config.xml中有相应ActionForm的name。通过这个name。首先在session或request中查找,假设有直接返回;没有通过name拿到相应value来通过反射得到相应类的实例。
4.设置表单数据
将表单数据设置到ActionForm
5.创建并运行Action
调用RequestProcessor的processActionCreate来创建Action。创建过程类似于ActionForm。
运行execute方法,调用业务逻辑,返回response对象,转发到jsp页面,渲染页面。
actionForm:一种和actionconfig关联的javabean,在相应的action被调用之前都会自己主动初始化參数。将经过验证的数据填充自己类相应的属性。
长处:
1.struts相当于一种隔离,仅仅有经过actionform的数据才干被后面的action调用。
多少进行了一些隔离和过滤。
2.在http请求和action之间建立桥梁,也算是一种针对业务的分层和解耦吧。
针对表单数据的单独处理。
缺点:
1.当仅仅有一个或几个actionform时。这样的解决方式当然解决并应对问题。而后面出现几百个actionform时这样的针对每一个请求来整合数据的方式就影响了效率,不单单在编写时候easy出问题,也不利于后面的维护。所以后面的struts1.x都针对这个问题出现了dynaactionform的解决方式。将相关的属性配置在xml文件里,这样更改和编写仅仅用来针对config来改动就可以。
后序
上文留了一个包袱了。为什么须要struts?在之前由于有了jsp以及ejb、jdbc等开发技术足够支持web的开发。
但struts在jsp和model之间相当于桥梁的作用。一个功能强劲、性能更加优越的控制和转发数据中心,事实上还是一个以MVC为核心的控制器。再者struts很多其它可扩展的配置(注:非常多配置都可在相应xml中配置),以及很多其它组件(ActionMapping、ActionForm等)处理支持得以使用,就像有一把水果刀,突然给了你一把多功能瑞士军刀,为何不用呢?
总的来讲struts会自己主动创建、组装、校验和最后处理 Action对象所相应的ActionForm。
这样Action 就能够直接从 ActionForm bean 取得它须要的数据以及渲染到最后的jsp中。
版权声明:本文博主原创文章。博客,未经同意不得转载。
struts 1.x 原理的更多相关文章
- Struts1——从BeanUtils看struts的实现原理2
上一篇博客中我们简单的介绍了BeanUtils的使用.以及其最主要的原理,今天我们进一步的理解这个类在Struts1中的使用. 首先我们先回想一下搭建一个简单的基于Struts1框架的 ...
- Struts简介、原理及简单实现
struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...
- struts过滤器的原理
struts就是充当拦截器(过滤器)的作用.在web.xml配置过滤器, package cn.itcast.framework.core; import java.io.IOException; i ...
- Struts MVC工作原理(转载)
1.Struts MVC中Model 1 和Model 2简介 我们在开发Web应用时经常提到的一个概念是Model 1/Model 2,那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用 ...
- Struts 原理
今天开始接触公司的框架,叫YNA,三个字母应该是雅马哈的缩写,这个框架听公司前辈说功能很强大,但实际上我看不懂.哈哈...... 其中整合了SSH框架,接下来我说下Struts的一些原理 其实这张图就 ...
- struts2的核心和工作原理
struts2的核心和工作原理 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于clien ...
- Java Web整合开发实战:基于Struts 2+Hibernate+Spring 目录
第1篇 Java Web开发基础第1章 Web的工作机制( 教学视频:31分钟) 1.1 理解Web的概念 1.1.1 Web的定义 1.1.2 Web的三个核心标准 1.2 C/S与B/S两种软件体 ...
- SSH框架之Struts(2)——Struts的执行流程之配置文件
上篇我们大致了解了一下採用了Struts框架的web页面运行流程. 接下来的几篇我们通过Struts的源代码来学习一下Struts的内部原理. 当server启动的时候.server会依据配置文件初始 ...
- Struts面试笔记
Struts2面试题1.struts2工作流程Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心控制器 ...
随机推荐
- COST CUTTING THE ALAN GREENBERG WAY
AnatBird.com COST CUTTING THE ALAN GREENBERG WAY
- 约瑟夫问题--list模拟循环链表
约瑟夫问题 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 n个人想玩残酷的死亡游戏,游戏规则例如以下: n个人进行编号,分别 ...
- 关于WHERE后面不能放聚合函数(如SUM(...))的解决办法
我们在编写SQL语句的时候,常常会遇到需要将SUM()放到WHERE后面作为条件查询,事实证明这样是无法执行的,执行会报异常:聚合不应出现在 WHERE 子句中. 那么如何解决呢,使用HAVING关键 ...
- MBR格式无法识别2T以上的硬盘的问题
早上有人打电话说四块2T的sata 硬盘做了raid 5之后安装window server 2012的时候,无法创建分区,安装完系统后无法给剩余的硬盘创建分区,刚开始的时候我还以为是别人分区的数量问题 ...
- LVS+Keepalived实现高可用负载均衡(转)
LVS+Keepalived实现高可用负载均衡 一.原理 1.概要介绍 如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具 ...
- poj3264(线段树区间求最值)
题目连接:http://poj.org/problem?id=3264 题意:给定Q(1<=Q<=200000)个数A1,A2,```,AQ,多次求任一区间Ai-Aj中最大数和最小数的差. ...
- Windows Server时间服务器配置方法
1 时间服务器经常会碰到客户端机器需要和服务器在时间上保持同步,否则会出现各种问题,特别是有时间相关的触发功能的时候. 为解决各设备间时间统一的问题,我们可在网络中设置一台服务器使其作为基准时间,其它 ...
- c#程序内存分配
c#程序内存分配 进程可使用内存数就是操作系统给进程分配的最大地址,一般的32位操作系统提供给用户地址最大都是3g(操作系统自己保留1g),windows由于商业目的,对于个人用户只提供了2g地址,要 ...
- ubuntu软件中心崩溃
网上找了下别人的解决方法(本人測试成功解决此问题): 提示说是lists出错 我的正是这样的情况 使用例如以下命令能够修复: 1.删除lists sudo rm /var/lib/apt/lists/ ...
- 2012天津E题
给我们n个坐标点和一个距离d,表示车开m米就没油了. 然后要选几个点建立油站,使得能够从1出发遍历所有的点,然后回到1. 并且规定1这个点必须有油站,在第i个点建立油站的费用是 2^(i-1) 因为 ...