序
经过了两个星期不懈努力,今天终于完成了对 strtus 整体架构及核心标签库的介绍。
从几乎不懂 struts 和 HTML 标签,到可以给别人解决涉及 struts 的一些小问题,这与朋
友的帮助和我的努力是分不开的,但我更希望它能给那些想要学的,正在学的和已经学过
的人带来不同的益处。我知道我是个新手,但我会用百倍的努力继续在这个领域进行深入
性的和扩展性的学习与研究。同时,就象我说的,我们会用实际行动证明我们为你提供的
帮助。
这章适合做参考资料,他不仅包含了对 struts 的整体架构及主要组件的详细和清晰
的介绍,而且对于很多人都关注的 struts 标签库也进行了细致的介绍,可以说它是你手
头一个可以用来进行参考的资料。当你哪里不清楚,你完全可以到这里查询。为了你查询
方便,我做了一个目录。
由于开源软件不断发展,所以这不可能是最后版本,我会不断进行内容的修改和新特
性的添加。比如 strus1.1 的 Nested Tag,但由于个人技术水平和时间等多方面原因,速
度不会太快,这就需要大家的帮助,希望大家共同参加一些资料的整理。
最后,我真心的感谢 jag,banq,steelg,holen,七老爷,还有混血儿,要不是他,我
会更早完成这个资料的,不过他又一次锻炼了我的意志。
我已经尽力避免在文字或代码中出现错误,但是人无完,疏漏总是难免的。如果你在
阅读发现了其中的错误,比如文字的错误或错误的代码,我非常希望你将这些信息反馈给
我,这样会帮助其他人解决遇到的问题,也会不断完善这套资料。我的邮件是:
tyrones@cmmail.com
QQ:36983608
希望本资料能给你带来帮助!
2002 年 08 月 26 日 午夜
胡峤整理于 2002-9-12
mailto:qiaohu@263.net
1
1. Struts 框架 ................................................................................................................................1
1.1. Struts 压缩包内容.....................................................................................................1
1.2. Struts 体系结构 ........................................................................................................1
1.2.1. 模型...................................................................................................................2
1.2.2. 视窗...................................................................................................................2
1.2.3. 控制器...............................................................................................................2
1.3. Struts 框架中的组件.................................................................................................3
1.3.1. Struts 配置文件.................................................................................................3
1.4. ActionServlet 类........................................................................................................6
1.4.1. ActionServlet 配置............................................................................................6
1.4.2. ActionServlet 方法............................................................................................7
1.5. ActionMapping 类 ....................................................................................................8
1.6. Action 类...................................................................................................................8
1.6.1. Action 类的方法...............................................................................................9
1.7. ActionForm 类 ..........................................................................................................9
1.8. ActionForward 类 ...................................................................................................10
1.9. 错误处理.................................................................................................................11
1.9.1. ActionError 类 ................................................................................................11
1.9.2. ActionError 类 ................................................................................................11
2. Struts 标记库 ..........................................................................................................................13
2.1. Bean 标记 ...............................................................................................................13
2.1.1. Bean 复制标记................................................................................................13
2.1.2. 定义脚本变量的标记.....................................................................................14
2.1.3. 显示 Bean 属性...............................................................................................15
2.1.4. 消息标记和国际化.........................................................................................15
2.2. 逻辑标记.................................................................................................................16
2.2.1. 条件逻辑.........................................................................................................17
2.2.2. 重复标记.........................................................................................................18
2.2.3. 转发和重定向标记.........................................................................................19
2.3. HTML 标记 ............................................................................................................20
2.3.1. 显示表单元素和输入控件.............................................................................20
a) 表单标记.........................................................................................................21
b) 按钮和取消标记.............................................................................................22
c) 复位和提交标记.............................................................................................22
d) 文本和文本区标记.........................................................................................22
e) 检查框和复选框标记.....................................................................................23
f) 文件标记.........................................................................................................23
g) 单选钮标记.....................................................................................................23
h) 隐藏标记.........................................................................................................24
i) 密码标记.........................................................................................................24
j) 选择标记.........................................................................................................24
k) 选项标记 (这个元素需要嵌套在<html:select>标记里) ..............................24
2.3.2. 显示错误信息的标记.....................................................................................25
1
2.3.3. 其他 HTML 标记 ...........................................................................................26
2.4. 模板标记.................................................................................................................26
2.4.1. 插入标记.........................................................................................................26
2.4.2. 放置标记.........................................................................................................26
2.4.3. 获得标记.........................................................................................................27
2.4.4. 使用模板标记.................................................................................................27
2
1. Struts 框架
struts 框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于 MVC 的 web
应用程序的开发。
本章详细讨论 struts 架构。我们将看到 struts 是如何清晰地区分控制,事务逻辑和
外观,从而简化了开发应用程序过程的。我们还将介绍 struts 提供的类如何使得开发工作
更加简单,这些类包括:
1. 控制程序流程的类
2. 实现和执行程序事务逻辑的类
3. 自定义的标记库使得创建和验证 HTML 表单更加容易
1.1 Struts 压缩包内容
文件夹 jakarta-struts-1.0.2 包含两个目录,lib 和 webapps。在 lib目录中有使用 struts
创建应用程序是所需的文件:
文件 描述
jdbc2_0-stdext.jar 包含 JDBC2.0 Optional Package API 类。如果我们要使用 struts
提供的数据资源,就需要将这个文件拷贝到 WEB-INF\lib 下
Struts.jar 包含 struts 中所有的 java 类。同样也需要拷贝到 WEB-INF\lib
下
*.tld 标记库描述器文件,描述了多个 struts 标记库中的自定义标记。
同样要拷贝到 WEB-INF\lib 下
在 webapps 目录下有如下文件:
Web 应用程序 描述
Struts-blank.war 一个简单的 web 应用程序
Struts-documentation.war 包含 struts 站点上所有 struts 文档
Struts-example.war Struts 很多特性的示范
Struts-exercisetaglib.war 主要用于对自定义标签库进行增加而使用的
测试页,但也可以示范如何使用 struts 标记
Struts-template.war 包含 struts 模板标记的介绍和范例
Struts-upload.war 一个简单的例子,示范如何使用 struts 框架
上传文件
1.2 Struts 体系结构
让我们从 MVC 角度观察 struts 框架中的组件
1
框架中三个部分:模型,视窗和控制器。
1.2.1 模型
在 struts 框架中,模型分为两个部分:
系统的内部状态
可以改变状态的操作(事务逻辑)
内部状态通常由一组 ActinForm JavaBean 表示。根据设计或应用程序复杂度的不同,
这些 Bean 可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。
大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的
bean 调用。比如购物车 bean,它拥有用户购买商品的信息,可能还有 checkOut()方法用
来检查用户的信用卡,并向仓库发定货信息。
小型程序中,操作可能会被内嵌在 Action 类,它是 struts 框架中控制器角色的一部
分。当逻辑简单时这个方法很适合。
建议用户将事务逻辑(要做什么)与 Action 类所扮演的角色(决定做什么)分开。
1.2.2 视窗
由 JSP 建立,struts 包含扩展自定义标签库,可以简化创建完全国际化用户界面的过
程。
1.2.3 控制器
struts 中,基本的控制器组件是 ActionServlet 类中的实例 servelt,实际使用的
servlet 在配置文件中由一组映射(由 ActionMapping 类进行描述)进行定义。
2