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 原理的更多相关文章

  1. Struts1——从BeanUtils看struts的实现原理2

        上一篇博客中我们简单的介绍了BeanUtils的使用.以及其最主要的原理,今天我们进一步的理解这个类在Struts1中的使用.     首先我们先回想一下搭建一个简单的基于Struts1框架的 ...

  2. Struts简介、原理及简单实现

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...

  3. struts过滤器的原理

    struts就是充当拦截器(过滤器)的作用.在web.xml配置过滤器, package cn.itcast.framework.core; import java.io.IOException; i ...

  4. Struts MVC工作原理(转载)

    1.Struts MVC中Model 1 和Model 2简介 我们在开发Web应用时经常提到的一个概念是Model 1/Model 2,那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用 ...

  5. Struts 原理

    今天开始接触公司的框架,叫YNA,三个字母应该是雅马哈的缩写,这个框架听公司前辈说功能很强大,但实际上我看不懂.哈哈...... 其中整合了SSH框架,接下来我说下Struts的一些原理 其实这张图就 ...

  6. struts2的核心和工作原理

    struts2的核心和工作原理 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于clien ...

  7. 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两种软件体 ...

  8. SSH框架之Struts(2)——Struts的执行流程之配置文件

    上篇我们大致了解了一下採用了Struts框架的web页面运行流程. 接下来的几篇我们通过Struts的源代码来学习一下Struts的内部原理. 当server启动的时候.server会依据配置文件初始 ...

  9. Struts面试笔记

    Struts2面试题1.struts2工作流程Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心控制器 ...

随机推荐

  1. hdu4489(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4489 题意:给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 详细思路参考:http:/ ...

  2. hdu1503(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意:由两个字符串构造出另一个字符串,该字符串包含前两个字符串(按字符顺序,但不一定连续),使该 ...

  3. IntelliJ IDEA Groovy(转)

    更新环境变量: source /etc/profile 验证是否成功: # groovy -version Groovy Version: 2.3.6 JVM: 1.7.0_67 Vendor: Or ...

  4. quick-cocos2d-x游戏开发【4】——加入文本

    文本的加入在quick中被封装在ui类中,它能够创建EditBox.菜单以及文本,文本总得来说能够创建TTF和BMFont两种. api对于它的说明非常具体.ui.newBMFontLabel(par ...

  5. ocx控件手动修改clsid的方法

    替换掉工程的两个地方:IDL文件和CTRL文件. IMPLEMENT_OLECREATE_EX(CMultiwndCtrl, "MULTIWND.MultiwndCtrl.1", ...

  6. 恢复js文件在windows默认打开方式

    解决办法: 运行 regedit 打开注册表编辑器,定位 "HKEY_CLASSES_ROOT" > ".js" 这一项,双击默认值将数值数据改为&quo ...

  7. 关于cocos2dx3.0 UITextField不能使用退格键删除字符的解决方式

    近日開始将项目移植到cocos2dx 3.0版本号,出现了一些问题,UI方面眼下就发现UITextField控件不能响应退格键或者删除键,在Windows以下调试如此,我開始以为是平台支持不好,后来公 ...

  8. 2012天津E题

    给我们n个坐标点和一个距离d,表示车开m米就没油了. 然后要选几个点建立油站,使得能够从1出发遍历所有的点,然后回到1.  并且规定1这个点必须有油站,在第i个点建立油站的费用是 2^(i-1) 因为 ...

  9. mysql替换字段里数据内容部分字符串(亦可用于增加字段中的内容)

    mysql替换表的字段里面内容,如例子: mysql> select host,user from user  where user='testuser'; +----------------- ...

  10. Uva562(dp)

    给我们n个硬币 每个硬币都有它的面值,要我我们分为两堆硬币,使得硬币的差值最小 我们可以dp计算出所有的差值,然后从小到大枚举差值,如果差值存在,就输出 dp[i][j] 表示对于前i件物品能达到差值 ...