第一范文网 - 专业文章范例文档资料分享平台

三大框架SSH的底层机制及原理

来源:用户分享 时间:2025/7/23 17:13:15 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

图三

图三基本勾勒出了一个基于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类中,也就是说,图3中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参数等。但瑕不掩瑜,这些没有影响它被广泛使用

为什么使用Struts2 ?

新版本的Struts2.0是struts 的action架构和webwork的融合体.依照Struts2.0.1的发布公告,一些关键特性如下 :

? 设计简单: 使用抽象类而不是接口是Struts1的一个设计上的问题,这

已经在Struts2中得到了解决.在Struts2中绝大多数类都是基于接口的,并且它的绝大多数核心接口都是独立于HTTP的.Struts2的Action类是独立于框架的,可视为单纯的POJO.框架的组件都设法保持松耦合

? 单纯的Action : Action都是单纯的POJO.任何含有execute()方法的

java类都可以当作Action类来使用.甚至我们始终都不需要实现接口.

反转控制会在开发Action类的时候得到介绍过,这能让Action中立于底层框架.

? 不再使用ActionForm : ActionForm特性不再在Structs2中出现.简单

的JavaBean即可对Action直接传递参数.不再需要全部使用String类型的参数.

? 简单的测试 : Struts2的Action是独立于HTTP并且中立于框架的.这

使得Struts2的程序可以很容易的在没有模拟对象的情况下测试.

? 巧妙的默认值 : 大多数配置元素都设有一个根据需要设定的默认值.

甚至根据需要基于XML的默认配置文件都可以进行重写.

? 改良的结果集 : 不像Struts1中的ActionForward,Struts2的结果集

灵活的提供了多种类型的输出,事实上这促进了响应的准备工作.

? 更好的标签特性 : Struts2可以添加样式表驱动标记,这使我们创建相

同的页面仅用更少的代码.Struts2的标签更有效而且是面向结果

的.Struts2的标签标记可以通过修改基础样式表来修改.个别的标签标记可以通过编辑FreeMarker的模板来修改.JSP和FreeMarker都完全得到了支持.

? 引入注释 : 在Struts2程序中,除了XML和Java properties 配置文件

外,Java 5的注释也可以作为一种选择.注释使得XML的使用降至最低.

? 有状态的Checkbox : Struts2中的checkbox不需要对false值进行特

殊处理.

? 快速开始 : 很多改变无需重启web容器即可实现.

? 自定义控制器 : Struts1可以自定义每一个模块的请求处理器,如果需

要,Struts2可以自定义每一个Action的请求处理.

? 易与Spring整合 : Struts2的Action与Spring是友好的,只需添加

Spring的bean

? 轻巧的插件 : Struts2可以通过添加一个Jar文件来进行扩展,不再需

要手动配置!

? 支持AJAX : AJAX主题对提升程序交互有着重要的意义.Struts2框架提

供了一套标签来AJAX化你的程序甚至DOJO.AJAX特性包括:

1. AJAX客户端验证.

2. 支持远程表单提交.(同样适用于submit标签) 3. 先进的div模板提供动态重载部份HTML

搜索更多关于: 三大框架SSH的底层机制及原理 的文档
三大框架SSH的底层机制及原理.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6d5el05qt84ddq343guy_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top