第一部分 Struts基础 2
第1章 引言 2
1.1 什么是Web应用程序 2
1.2 Struts可以做什么 3
1.3 关于读者 4
1.4 如何阅读此书 4
1.5 有用的链接 4
第2章 复习servlet和JSP 6
2.1 实验2:安装Tomcat 6
2.2 servlet容器基础 8
2.3 重要的servlet类 10
2.4 JSP 10
2.4.1 解析Hello.jsp 12
2.4.2 最后的思考 13
2.5 有用的链接 13
2.6 小结 13
第3章 理解作用域 14
3.1 实验3:作用域测验 15
3.2 会话和请求作用域内幕 17
3.3 小结 17
第4章 定制标签 18
4.1 定制标签基础 18
4.2 如何处理定制标签 19
4.3 Java标签处理器类 20
4.4 辅助类 22
4.5 TLD文件 23
4.6 实验4:温度转换标签 25
4.6.1 步骤1:准备开发环境和脚本 26
4.6.2 步骤2:编写Java标签处理器 26
4.6.3 步骤3:编写标签库描述文件 26
4.6.4 步骤4:修改web.xml 27
4.6.5 步骤5:编写JSP 27
4.6.6 步骤6:部署和测试 27
4.9 小结 28
4.8 有用的链接 28
4.7 专业的Java工具 28
第5章 MVC设计模式 29
5.1 注册Web应用 31
5.1.1 需求1 31
5.1.2 需求2 32
5.1.3 需求3 32
5.1.4 需求4 32
5.1.5 需求5 34
5.2 实验5:MVC测验 35
5.3 从哪里入手 36
5.4 Struts和MVC 37
5.5 Struts请求的生命周期 38
5.6 针对模型的框架 39
5.7 有用的链接 40
5.8 小结 40
6.1 处理简单验证 41
6.2 解剖ActionForm 41
第6章 简单验证 41
6.3 使用ActionErrors 45
6.4 实验6:LILLDEP的ContactForm 48
6.4.1 步骤1:准备开发环境和脚本 49
6.4.2 步骤2:实现ContactForm的获取器和设置器 49
6.4.3 步骤3:实现validate() 50
6.4.4 步骤4:实现reset() 50
6.5 现在Struts已经做了什么 50
6.6 小结 51
第7章 处理业务逻辑 52
7.1 Action简介 52
7.2 Action的无状态性 53
7.3 子类化Action 54
7.4 注册Web应用程序中的业务逻辑 54
7.5 复杂验证 57
7.6 数据变换 58
7.7 导航 59
7.8 实验7:为LILLDEP实现ContactAction 60
7.9 小结 61
第8章 基本Struts标签 62
8.1 页面处理生命周期 62
8.2 “注册Web应用程序”的视图组件 64
8.2.1 声明和安装HTML和Bean标签库 66
8.2.2 显示静态文本 66
8.2.3 表单和表单处理器 67
8.2.4 数据输入标签 68
8.2.5 显示错误 69
8.3 HTML和Bean标签库概要 70
8.4 实验8:为LILLDEP创建Contact输入页面 71
8.5 有用的链接 72
8.6 小结 72
第9章 配置Struts 73
9.1 struts-config.xml的结构 73
9.2 配置注册Web应用程序 74
9.3 声明表单bean 75
9.4 声明全局异常 76
9.6 声明表单处理器 77
9.5 声明全局转发 77
9.7 控制器声明 79
9.8 消息资源 80
9.9 声明插件 80
9.10 实验9a:配置LILLDEP 81
9.11 代码重用 82
9.12 实验9b:MNC页面 82
9.13 小结 83
第10章 其他标签 84
10.1 最佳实践 85
10.2 剩下的2+1个Struts标签库 85
10.3 Logic标签库 85
10.3.1 迭代 86
10.3.2 简单的、嵌套的、索引的、映射的属性 88
10.3.3 条件处理 89
10.3.4 流控制 90
10.4 Nested标签库 91
10.5 JSTL和Struts 93
10.5.2 使用EL 95
10.5.1 表达语言(EL) 95
10.5.3 〈c:out〉标签 96
10.5.4 〈c:forEach〉标签 97
10.5.5 〈c:if〉和〈c:choose〉...〈c:when〉标签 98
10.6 StrutsEL扩展 99
10.7 实验10a:LILLDEP的全部列表页面 99
10.7.3 步骤3:修改web.xml 100
10.7.4 步骤4:修改struts-config xml 100
10.7.2 步骤2:完成listing.jsp 100
10.7.1 步骤1:完成ListingAction 100
10.8 实验10b:简化ContactForm 101
10.8.1 步骤1:修改ContactForm 101
10.8.2 步骤2:修改full.jsp和mnc.jsp 101
10.9 实验10c:使用JSTL 101
10.9.1 步骤1:安装JSTL和Struts EL标签库 101
10.9.2 步骤2:修改web.xml 101
10.11 小结 102
10.9.3 步骤3:修改listing.jsp 102
10.10 有用的链接 102
第11章 上传文件 103
11.1 一次上传固定数量的文件 104
11.2 上传任意数量的文件 107
11.3 Lab 11:导入数据到LILLDEP中 114
11.3.1 步骤1:完成ImportForm 114
11.3.2 步骤2:完成import.jsp 114
11.3.3 步骤3:完成ImportAction 114
11.3.4 步骤4:修改struts-config.xml 115
11.3.5 步骤5:编译、重新部署 115
并测试应用 115
11.4 有用的链接 115
11.5 小结 115
第12章 国际化 116
12.1 字符编码,Unicode和UTF-8 116
12.2 场所(Locale) 118
12.3 处理输入 119
12.4 本地化验证 120
12.5 本地化输出 122
12.5.1 处理翻译后的Application.properties文件 123
12.5.2 从浏览器中选择一个场所 123
12.5.3 通过一个链接切换场所 124
12.5.4 用LocaleAction来切换场所 125
12.6 实验12:针对马来西亚语市场的LILLDEP 125
12.8 小结 126
12.7 有用的链接 126
第13章 复习实验:在LILLDEP中编辑联系人信息 127
第二部分 高级Struts 130
第14章 Tiles 130
14.1 安装Tiles 131
14.2 用Tiles进行布局 132
14.3 Tiles组件 137
14.4 实例:一个“登录”Files组件 140
14.5 获取外部表单数据 153
14.6.2 步骤2:编写控制器 154
14.6 实验14:查找功能 154
14.6.1 步骤1:设置Tiles 154
14.6.3 步骤3:设置Tiles Action Mapping 155
14.6.4 步骤4:修改ContactAction 156
14.6.5 步骤5:编写Tiles JSP 156
14.6.6 步骤6:编写Tiles定义 156
14.6.7 步骤7:放入Find Tile 156
14.6.8 步骤8:部署和测试 157
14.7 小结 157
第15章 Validator框架 158
15.1 声明验证器插件 159
15.2 验证器DTD基础 160
15.3 使用Validator框架 161
15.3.1 例子:验证RegistrationForm 161
15.3.2 验证嵌套和索引属性 165
15.3.3 使用常数 166
15.4 标准验证器 167
15.3.4 客户端验证 167
15.4.1 使用validwhen 168
15.4.2 策划索引的字段使用validwhen 169
15.5 添加定制验证 170
15.5.1 实现validate() 171
15.5.2 扩展Validator框架 171
15.5.3 实现Java处理器类 172
15.6 迁移遗留代码 176
15.7 本地化验证 177
15.8 实验15:在LILLDEP可使用Validator框架 177
15.9 有用的链接 178
15.10 小结 178
第16章 动态表单 179
16.1 声明动态表单 179
16.1.1 声明一个简单属性 181
16.1.2 声明索引属性 181
16.1.4 声明嵌套属性 182
16.1.3 声明一个映射属性 182
16.2 存取动态属性 183
16.3 动态表单的缺点 183
16.4 验证动态表单 184
16.5 使用动态表单的注册Web应用程序 185
16.6 LazyValidatorForm(Struts 1.2.6+) 189
16.7 BeanValidatorForm(Struts 1.2.6+)的隐藏威力 192
16.8 实验室16:在LILLDEP中删除选定的联系人 192
16.8.3 步骤3:创建删除联系人的Action 193
16.9 有用的链接 193
16.8.1 步骤1:声明SelectionForm表单bean 193
16.8.2 步骤2:修改listing.jsp 193
16.10 小结 194
第17章 Struts锦囊 195
17.1 PropertyUtils 195
17.1.1 使用PropertyUtils 196
17.1.2 小结 197
17.2 DownloadAction(Struts 1.2.6+) 198
17.3 LocaleActi on 200
17.4 IncludeActi on和ForwardAction 202
17.5 LookupDispatchAction 203
17.6 DispatchAction 208
17.7 MappingDispatchAction 209
17.8 使用全局转发 212
17.9 日志 212
17.10 使用通配符 214
17.11 分解struts-config.xml 216
17.13 小结 219
17.12 有用的链接 219
第18章 复习实验:集合功能 220
18.1 实验18a:主集合页面 221
18.2 实验18b:新的集合页面 221
18.3 实验18c:集合列表页面 223
18.4 实验18d:删除选择的联系人 224
18.5 实验18e:添加选择的联系人 225
18.6 实验18f:前后导航 226
18.7 小结 227
第19章 开发插件 228
19.1 手头的任务 228
19.2 实现路线图 231
19.3 Struts如何处理表单bean 231
19.4 插件的解剖 234
19.5 实现DynaFormsPlugIn 235
19.6 用Apache Digester读取XML 237
19.7 实现DynaFormsLoaderFactory 240
19.8 DefaultDynaFormsLoader 243
19.9 实验19:测试DynaForms插件的使用 251
19.10 增加功能的实验:处理〈set-property〉 251
19.11 有用的链接 253
19.12 小结 254
第20章 JSF和Struts Shale 255
20.1 JSF概览 255
20.2 Shale概览 256
20.3 学习Struts是浪费时间吗 257
20.4.1 服务器端UI组件 258
20.4 JSF 258
20.4.2 请求处理生命周期 260
20.4.3 事件和事件监听器 262
20.4.4 JSF标签库 266
20.4.5 值绑定和方法绑定 266
20.4.6 导航 267
20.5 示例:注册Web应用程序 268
20.5.1 配置JSF 268
20.5.2 消息资源 269
20.5.3 user后台bean 270
20.5.4 视图 277
20.6 接下来去哪里 280
20.7 实验20:Struts-Faces集成库 281
20.7.1 步骤1:准备开发 281
20.7.2 步骤2:安装JSF、JSTL和Struts-Faces集成库 282
20.7.3 步骤3:编辑web.xml和Struts-config.xml 282
20.7.4 步骤4:迁移Struts JSP页面 283
20.7.5 步骤5:迁移〈forward〉和输入 284
20.7.6 步骤6:使进入点转发到*.faces 285
20.7.7 步骤7:如有必要,修改Action 285
20.7.8 步骤8:添加必要的〈managed-bean〉声明 286
20.7.9 小结 286
20.8 Struts Shale预览 286
20.8.1 ViewController 287
20.8.2 对话管理器 291
20.8.3 集成验证器框架 293
20.8.4 JNDI集成 295
20.8.5 通过Clay重用视图 296
20.8.6 服务器端Ajax支持 297
20.8.7 测试框架 297
20.9 JSF、Shale与Struts 297
20.10 有用的链接 299
20.11 小结 300
附录A 模型框架 301
附录B 常用类 314