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. Hermes和开源Solr、ElasticSearch 不同

    Hermes和开源Solr.ElasticSearch不同          谈到Hermes的索引技术.相信非常多同学都会想到Solr.ElasticSearch.Solr.ElasticSearc ...

  2. SE 2014年4月8日

    1.路由引入的作用? 当网络中运行多种路由协议的时候,由于不同协议的路由算法和度量值等均不相同,路由引入可以将不同协议的路由引入到当前的路由协议中,保证网络的互通. 对比单向入和双向入 单向引入是只将 ...

  3. Harris角点检测算原理

    主要参考了:http://blog.csdn.net/yudingjun0611/article/details/7991601  Harris角点检测算子 本文将该文拷贝了过来,并做了一些数学方面的 ...

  4. FZU 1686(重复覆盖)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31370 题意:用尽量少r*c的小矩形覆盖大矩形n*m中的所有1,将 ...

  5. 处理json中影响解析的多余引號

    在xml中,敏感字符是尖括号,在json中,敏感字符是引號,上文中我们介绍了怎样处理xml中的敏感字符.本文说说怎样处理json中的敏感字符. 思路与上文同样,不再赘述.直接上代码: json–> ...

  6. 创建和关联内容数据库到指定Web应用程序和站点集

    创建和关联内容数据库到指定Web应用程序和站点集         一个Web应用程序不限于使用单个内容数据库.SharePoint同意你关联多个内容数据库到Web应用程序.原因之中的一个是基于内容数据 ...

  7. OpenStack镜像管理3

    第三部分 OpenStack镜像管理 一.简介 很多源都有为OpenStack已经编译好的各种镜像了,您可以直接下载并通过使用这些镜像来熟悉OpenStack. 不过如果是为生产环境进行部署的话,您一 ...

  8. linux下查看进城(ps)的方法 与 杀死进程(kill)的N种方法

    PS查看进程 inux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必 ...

  9. SVN中正确的add操作和delete操作

    add操作: delete操作:

  10. Codeforces Round #253 (Div. 1) (A, B, C)

    Codeforces Round #253 (Div. 1) 题目链接 A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来. 思路:一共2^10种情况,直接暴力枚举,然 ...