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和用户实现的企业业务逻辑组件. 核心控制器 ...
随机推荐
- hdu1158(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1158 分析:dp[i][j]表示第i个月用j个人需要花费的最少费用: 则状态转移方程为:dp[i][j ...
- HDU 4028 The time of a day STL 模拟题
暴力出奇迹.. #include<stdio.h> #include<iostream> #include<algorithm> #include<vecto ...
- 解决:Determining IP Information for eth0 一直停留 无法进入系统
问题场景: vm centos6.4网卡之前一直没异常,可今天启动时一直卡在Determining IP Information for eth0,无法进入系统.网上说了非常多办法,大多都是不着边的说 ...
- Eclipse常用热键
,Ctrl+D 删除选中的几行 ,Alt+上下箭头 移动选中的代码块 ,Alt+左右箭头 回退 前进 ,Alt+Shift+上下箭头 复制选中的代码块 ,sysout+Ctrl space 生成Sys ...
- uvalive 2088 - Entropy(huffman编码)
题目连接:2088 - Entropy 题目大意:给出一个字符串, 包括A~Z和_, 现在要根据字符出现的频率为他们进行编码,要求编码后字节最小, 然后输出字符均为8字节表示时的总字节数, 以及最小的 ...
- 【Arduino】8地点LED数码管(3461BS)
淘宝买了一块3461BS的8地点LED数码管,婴儿就迫不及待地尝试,结果看到了文件,好家伙无Arduino测试程序. 莫急~莫急~无论如何串行操作,大不了呗瞎蒙! 以下几点是在更有趣的点瞎蒙: 1.须 ...
- 天翼玩家wifi,鸡肋or神器?
昨天,天一在成都,一个举行4G体验活动.谁是背着一个婴儿每一翼4G MiFi终奌站.市民可进入用户password自由的直接经验wifi互联网. 天翼随身wifi是什么? 这样的4G MiFi就是天翼 ...
- 彻底理解Javascript原型继承
彻底理解Javascript原型继承 之前写过一篇Javascript继承主题的文章,这篇文章作为一篇读书笔记,分析的不够深入. 本文试图进一步思考,争取彻底理解Javascript继承原理 实例成员 ...
- windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码
原文:windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码 关于silverlight和wp7(windows phone 7)是默认不支持gb2312 ...
- 在阿里云上布置git server
前言 东莞,晴,26至32度. 一直以为都是使用SVN Server作为私用的版本号控制器.随着Git的大行其道.近期由于项目须要,也试着在阿里云上部署Git Server.这里由于团队人员少.我採用 ...