教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

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

来源:网络收集 时间:2026-04-14
导读: 图四 这里要特别说明一下的是:就是Action这个类,上面已经说到了它是Struts中真正干活的地方,也是值得我们高度关注的地方。可是,关于它到底是属于控制层还是属于模型层,存在两种不同的意见,一种认为它属于模型

图四

这里要特别说明一下的是:就是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

4. 先进的模板提供远程加载和计算Javascript的能力. 5. AJAX-only选项卡面板的实现 6. 丰富的发布/订阅事件模型 7. 自动交互完善标签

深入全面阐释Struts 2的方方面面

一、 Struts概述

Struts是一个用来开发 Model 2应用程序的框架。这个框架可以提高开发工作的速度,因为它提供的下面这些功能解决了 Web应用程序开发过程中的一些常见问题:

? ? ? ? ? ?

对页面导航活动进行管理;

对来自用户的输入数据进行合法性验证; 统一的布局; 可扩展性;

国际化和本地化; 支持 Ajax技术。

因为 Struts是一个 Model 2框架,所以在使用 Struts时还应该遵守以下几条不成文的规定。

不要在 JSP页面里嵌入 Java代码,应该把所有的业务逻辑包含在一些被称为“动作类”( action class)的 Java类里。

? 在 JSP页面里使用 Expression Language( OGNL)去访问有关的模型对象。

? 尽量避免编写自定义标签(因为自定义标签的代码比较难以编写)。

?

二、升级到 Struts 2

你也许用过 …… 此处隐藏:3634字,全部文档内容请下载后查看。喜欢就下载吧 ……

三大框架SSH的底层机制及原理(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/434863.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)