知识大全 名词解释 什么是Struts?
Posted 知
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 名词解释 什么是Struts?相关的知识,希望对你有一定的参考价值。
名词解释 什么是Struts? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
框架(Framework)是可重用的 半完成的应用程序 可以用来产生专门的定制程序
您只要细心地研究真实的应用程序 就会发现程序大致上由两类性质不同的组件组成 一类与程序要处理的具体事务密切相关 我们不妨把它们叫做业务组件 另一类是应用服务 比如说 一个税务征管系统和一个图书管理系统会在处理它们的业务方面存在很大的差异 这些直接处理业务的组件由于业务性质的不同不大可能在不同的系统中重用 而另一些组件如决定程序流向的控制 输入的校验 错误处理及标签库等这些只与程序相关的组件在不同的系统中可以很好地得到重用 人们自然会想要是把这些在不同应用程序中有共性的一些东西抽取出来 做成一个半成品程序 这样的半成品就是所谓的程序框架 再做一个新的东西时就不必白手起家 而是可以在这个基础上开始搭建 实际上 有些大型软件企业选择自己搭建这样的框架 但大多数中小型软件企业或者其他组织 没有条件自己建立框架
Struts作为一个开放原代码的应用框架 在最近几年得到了飞速的发展 在JSP Web应用开发中应用得非常广泛 有的文献上说它已经成为JSP Web应用框架的事实上的标准 那么 究竟什么是Struts呢?
要回答这个问题还得从JSP Web应用的两种基本的结构模式 Model 和Model 说起 为了给读者一些实实在在的帮助 并力图让学习曲线变得平坦一些 我想采用实例驱动的方法来逐步深入地回答有关问题 因为 学一门技术的最好方法莫过于在实践中学习 在实践中体会 逐步加深对其精神实质的理解和把握 而不是一上来就引入一大堆新概念让大家觉得无所适从 或者死记硬背一大堆概念而面对一个真正的实际需求束手无策 正如 一个人即使在书本上学成了游泳博士 只要他不下水 我想他也是不大可能真正会游泳的
Model 结构如图 所示
图
mode 是一个以JSP文件为中心的模式 在这种模式中JSP页面不仅负责表现逻辑 也负责控制逻辑 专业书籍上称之为逻辑耦合在页面中 这种处理方式 对一些规模很小的项目如 一个简单的留言簿 也没什么太大的坏处 实际上 人们开始接触一些对自己来说是新的东西的时候 比如 用JSP访问数据库时 往往喜欢别人能提供一个包含这一切的单个JSP页面 因为这样在一个页面上他就可以把握全局 便于理解 但是 用Model 模式开发大型时 程序流向由一些互相能够感知的页面决定 当页面很多时要清楚地把握其流向将是很复杂的事情 当您修改一页时可能会影响相关的很多页面 大有牵一发而动全身的感觉 使得程序的修改与维护变得异常困难 还有一个问题就是程序逻辑开发与页面设计纠缠在一起 既不便于分工合作也不利于代码的重用 这样的程序其健壮性和可伸缩性都不好
Grady Booch等人在UML用户指南一书中 强调建模的重要性时 打了一个制作狗窝 私人住宅 和大厦的形象比喻来说明人们处理不同规模的事物时应该采用的合理方法一样 人们对不同规模的应用程序也应该采用不同的模式
为了克服Model 的缺陷 人们引入了Model 如图 所示
图
它引入了 控制器 这个概念 控制器一般由servlet来担任 客户端的请求不再直接送给一个处理业务逻辑的JSP页面 而是送给这个控制器 再由控制器根据具体的请求调用不同的事务逻辑 并将处理结果返回到合适的页面 因此 这个servlet控制器为应用程序提供了一个进行前 后端处理的中枢 一方面为输入数据的验证 身份认证 日志及实现国际化编程提供了一个合适的切入点 另一方面也提供了将业务逻辑从JSP文件剥离的可能 业务逻辑从JSP页面分离后 JSP文件蜕变成一个单纯完成显示任务的东西 这就是常说的View 而独立出来的事务逻辑变成人们常说的Model 再加上控制器Control本身 就构成了MVC模式 实践证明 MVC模式为大型程序的开发及维护提供了巨大的便利
其实 MVC开始并不是为Web应用程序提出的模式 传统的MVC要求M将其状态变化通报给V 但由于Web浏览器工作在典型的拉模式而非推模式 很难做到这一点 因此有些人又将用于Web应用的MVC称之为MVC 正如上面所提到的MVC是一种模式 当然可以有各种不同的具体实现 包括您自己就可以实现一个体现MVC思想的程序框架 Struts就是一种具体实现MVC 的程序框架 它的大致结构如图三所示
图三
图三基本勾勒出了一个基于Struts的应用程序的结构 从左到右 分别是其表示层(view) 控制层(controller) 和模型层(Model) 其表示层使用Struts标签库构建 来自客户的所有需要通过框架的请求统一由叫ActionServlet的servlet接收(ActionServlet Struts已经为我们写好了 只要您应用没有什么特别的要求 它基本上都能满足您的要求) 根据接收的请求参数和Struts配置(struts config xml)中ActionMapping 将请求送给合适的Action去处理 解决由谁做的问题 它们共同构成Struts的控制器 Action则是Struts应用中真正干活的组件 开发人员一般都要在这里耗费大量的时间 它解决的是做什么的问题 它通过调用需要的业务组件(模型)来完成应用的业务 业务组件解决的是如何做的问题 并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户
过程如图四所示
这里要特别说明一下的是 就是Action这个类 上面已经说到了它是Struts中真正干活的地方 也是值得我们高度关注的地方 可是 关于它到底是属于控制层还是属于模型层 存在两种不同的意见 一种认为它属于模型层 如 《JSP Web编程指南》 另一些则认为它属于控制层如 《Programming Jakarta Struts》 《Mastering Jakarta Struts》和《Struts Kick Start》等认为它是控制器的一部分 还有其他一些书如《Struts in Action》也建议要避免将业务逻辑放在Action类中 也就是说 图 中Action后的括号中的内容应该从中移出 但实际中确有一些系统将比较简单的且不打算重用的业务逻辑放在Action中 所以在图中还是这样表示 显然 将业务对象从Action分离出来后有利于它的重用 同时也增强了应用程序的健壮性和设计的灵活性 因此 它实际上可以看作是Controller与Model的适配器 如果硬要把它归于那一部分 笔者更倾向于后一种看法 即它是Controller的一部分 换句话说 它不应该包含过多的业务逻辑 而应该只是简单地收集业务方法所需要的数据并传递给业务对象 实际上 它的主要职责是
校验前提条件或者声明
调用需要的业务逻辑方法
检测或处理其他错误
路由控制到相关视图
上面这样简单的描述 初学者可能会感到有些难以接受 下面举个比较具体的例子来进一步帮助我们理解 如 假设 我们做的是个电子商务程序 现在程序要完成的操作任务是提交定单并返回定单号给客户 这就是关于做什么的问题 应该由Action类完成 但具体怎么获得数据库连接 插入定单数据到数据库表中 又怎么从数据库表中取得这个定单号(一般是自增数据列的数据) 这一系列复杂的问题 这都是解决怎么做的问题 则应该由一个(假设名为orderBo)业务对象即Model来完成 orderBo可能用一个返回整型值的名为submitOrder的方法来做这件事 Action则是先校验定单数据是否正确 以免常说的垃圾进垃圾出 如果正确则简单地调用orderBo的submitOrder方法来得到定单号 它还要处理在调用过程中可能出现任何错误 最后根据不同的情况返回不同的结果给客户
二 为什么要使用Struts框架
既然本文的开始就说了 自己可以建这种框架 为什么要使用Struts呢?我想下面列举的这些理由是显而易见的 首先 它是建立在MVC这种公认的好的模式上的 Struts在M V和C上都有涉及 但它主要是提供一个好的控制器和一套定制的标签库上 也就是说它的着力点在C和V上 因此 它天生就有MVC所带来的一系列优点 如 结构层次分明 高可重用性 增加了程序的健壮性和可伸缩性 便于开发与设计分工 提供集中统一的权限控制 校验 国际化 日志等等 其次 它是个开源项目得到了包括它的发明者Craig R McClanahan在内的一些程序大师和高手持续而细心的呵护 并且经受了实战的检验 使其功能越来越强大 体系也日臻完善 最后 是它对其他技术和框架显示出很好的融合性 如 现在 它已经与tiles融为一体 可以展望 它很快就会与JSF等融会在一起 当然 和其他任何技术一样 它也不是十全十美的 如 它对类和一些属性 参数的命名显得有些随意 给使用带来一些不便 还有如Action类execute方法的只能接收一个ActionForm参数等 但瑕不掩瑜 这些没有影响它被广泛使用
三 Struts的安装与基本配置
我们主要针对Struts 版本进行讲解 这里假定读者已经配置好java运行环境和相应的Web容器 本文例子所使用的是j sdk和Tomcat 下面 将采用类似于step by step的方式介绍其基础部分
安装Struts
到 下载Struts的安装文件 本文例子使用的是 版
接下来您要进行如下几个步骤来完成安装
解压下载的安装文件到您的本地硬盘
生成一个新的Web应用 假设我们生成的应用程序的根目录在/Webapps/mystruts目录 在server xml文件中为该应用新建一个别名如/mystruts
从第 步解压的文件中拷贝下列jar文件到/Webapps/mystruts/WEB INF/lib目录 主要文件有如下一些
quote: struts jar mons-beanutils jar mons-collections jar mons-dbcp jar mons-digester jar mons-logging jar mons-pool jar mons-services jar mons-validator jar
创建一个web xml文件 这是一个基于servlet的Web应用程序都需要的部署描述文件 一个Struts Web应用 在本质上也是一个基于servlet的Web应用 它也不能例外
Struts有两个组件要在该文件中进行配置 它们是 ActionServlet和标签库 下面是一个配置清单
quote: //EN app_ _ dtd > action apache struts action ActionServlet config /WEB INF/struts config xml debug action * do /WEB INF/struts bean tld /WEB INF/struts bean tld /WEB INF/struts tld /WEB INF/struts tld /WEB INF/struts logic tld /WEB INF/struts logic tld
上面我们在web xml中完成了对servlet和标签库的基本配置 而更多的框架组件要在struts config xml中进行配置
创建一个基本的struts config xml文件 并把它放在/Webapps/mystruts/WEB INF/目录中 该文件是基于Struts应用程序的配置描述文件 它将MVC结构中的各组件结合在一起 开发的过程中会不断对它进行充实和更改 在Struts 时 一个应用只能有一个这样的文件 给分工开发带来了一些不便 在Struts 时 可以有多个这样的文件 将上述缺点克服了 需在该文件中配置的组件有 data sources
quote: global execptions form beans global forwards action mappings controller message resources plug in 配置清单如下 quote: //EN config_ _ dtd >
cha138/Article/program/Java/ky/201311/28798相关参考
全程解析Struts中两个相似类的解释 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Dispa
知识大全 spring在web.xml中和在struts中的不同配置
Spring中WebApplicationContext的研究 ApplicationContext是Spring的核心Context我们通常解释为上下文环境我想用容器来表述它更容易理解一些Ap
知识大全 学习比较Struts2和Struts1:Struts2完胜
学习比较Struts2和Struts1:Struts2完胜 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
Struts2简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一什么是Struts? 虽然
知识大全 Struts处方:Hibernate与Struts
Struts处方:Hibernate与Struts 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Struts的后代:Shale不是Struts 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! S
在Struts2中实现文件上传 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Struts是通过
struts是一个MVC框架像Java和其他Java框架一样struts可以轻松实现国际化于是根据网上的资料做了一个尝试因为第一次做多语言程序还是拐了很多弯路但所幸经过不断的尝试终于成功的实现多语
struts拦截器使用 一方法调用之后使用的拦截器实现interceptor接口 拦截器一定是线程安全的就是要同步 publicinterfaceInterceptorextendsSeri
Struts教程-Struts的几个精细之处 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近