1 Struts的来龙去脉 7
1 Struts的来龙去脉 7
1.1 木匠的寓言 7
目录一览 7
目录 7
1.2 Struts是什么? 8
1.2.1框架 8
1.2.2 Web应用 9
1.2.3 Struts框架中的组件 10
1.3 Struts的状况:发展现状 12
1.3.1 Struts版本 12
1.3.2其他可以和Struts一同使用的应用 12
1.4代码背后的面孔:Struts的开发 13
1.4.1核心开发者 13
1.5 Struts将走向何处 14
1.5.1集成JSTL 14
1.5.3 Struts将会被更广泛地接受 14
1.5.2集成JavaServer Faces 14
1.6结论 15
2 Model-View-Controller设计模式:Model 2JSP开发 17
2 Model-View-Controller设计模式:Model 2JSP开发 17
2.1 Model-View-Controller设计模式 18
2.2.1 JSP规范0.92版 20
2.2 Model 1与Model 2的起源 20
2.2.2 JavaWorld,1999 21
2.3 Struts如何实现Model 2模式 21
2.2.3时至Craig McClanahan,Jakarta Tomcat,以及Struts 21
2.3.1 用于Web应用的MVC架构 22
2.3.2 Model组件 23
2.3.3 View组件 24
2.3.4 Controller组件 25
2.4结论 25
3 Hello World!第一个Struts应用 27
3Hello World!第一个Struts应用 27
3.1 Hello World!应用的需求 28
3.2应用Model-View-Controller模式 28
3.3 View组件:HTML表单以及表单Bean 29
3.4 MessageResources和Application.properties文件 33
3.5 Struts表单Bean:HelloForm.java 33
3.6数据验证以及ActionError 36
3.7 Controller组件:HelloAction.java 38
3.7.1 Action类是如何工作的 40
3.7.2在MessageResources中访问特定Locale的文本 41
3.7.3业务逻辑级验证 42
3.7.4与Model组件交互 42
3.7.5向View组件传递数据 43
3.8 Model组件(HelloModeljava) 44
3.7.6跳转到合适的View组件 44
3.9通过使用属性向View传递数据:Constants.java 46
3.10将所有部分整合到一起:struts-config.xml文件 47
3.11 结论 49
4 HTTP协议:Web应用的通信与控制 51
4 HTTP协议:Web应用的通信与控制 51
4.1 HTTP协议以及请求/响应循环 52
4.2控制信息:HTTP头和HTTP响应码 55
4.2.1 HTTP响应码 55
4.2.2 HTTP请求和响应头 57
4.3HTTP Cookies和会话/用户管理 60
4.4结论 63
5 JSP,标记库和JSTL:使用Java扩充页面 65
5 JS P,标记库和JSTL:使用Java扩充页面 65
5.1 Servlets和JSP 65
5.1.1 JSP的威力 67
5.2 JSP中的对象作用范围 70
5.2.1除会话范围之外的其它对象范围 71
5.2.2从JSP中存取范围对象 72
5.3使用Bean来隐藏业务逻辑 73
5.4 JSP自定义标记库 78
5.5 Web应用部署 81
5.5.1WAR文件 83
5.6 JSTL:标准标记库 84
5.6.1通用目的操作 85
5.6.2条件操作 85
5.6.3迭代操作 85
5.6.4 URL相关的操作 85
5.6.5 国际化操作 85
5.6.6格式化操作 85
5.7 JSP与J2EE:一幅宏图 86
5.6.8 XML操作 86
5.6.7 SQL操作 86
5.6.9表达式语言 86
5.8 J2EE与Struts 88
5.9结论 88
6简单的应用:财务投资管理 89
6.1需求:从头到脚覆盖需求 89
6简单的应用:财务投资管理 89
6.2从线框(Wireframes)开始 90
6.2.1 主页面 90
6.2.2创建账号页面 91
6.2.3 交易条目(Transaction Entry) 91
6.3 开发用况(Use Cases) 94
6.3.1 用况:初始页面 95
6.3.2 况:账号创建页面 95
6.3.3 用况:已登录用户的主页面 96
6.3.4用况:添加交易页面 96
6.4数据源与存储 98
6.5选择技术 99
6.5.1 Torque 99
6.6结论 105
7 View组件:最终用户之所见 107
7.1 ActionForm 107
7 View组件:最终用户之所见 107
7.2 JSP文件:Alpha与Omega 116
7.3 自动类型转换的危险 123
7.4 html:errors标记 127
7.5国际化 127
7.6结论 130
8 Controller:导引Action 131
8.1 Action类 131
8 Controller:导引Action 131
8.2访问会话和其它表单Bean 136
8.3用户验证和Struts 150
8.4在应用内部和外部转移控制 152
8.5结论 153
9 Model组件:业务建模 155
9 Model组件:业务建模 155
9.1 设计良好的Model 156
9.2更多增强独立性的技术 159
9.3结论 165
10 struts-config.xml文件:整合所有部件 167
10.1 struts-config的DTD 167
10 struts-config.xml文件:整合所有部件 167
10.1.1数据源 168
10.1.2表单Bean 171
10.1.3全局异常(Global Exceptions) 172
10.1.4全局转发(Global Forwards) 174
10.1.5 Action映射 175
10.1.6 Controller 177
10.1.7消息资源 178
10.1.8 P1ug-in 179
10.1.9动态地访问和改变配置 180
10.2 config文件的前生后世 180
10.3结论 181
1 1 Struts标记库是如何工作的:内部探察 183
11 Struts标记库是如何工作的:内部探察 183
11.1回顾JSP标记库 184
11.2理解Struts标记如何工作:〈bean:page〉标记 184
11.2.1 〈bean:page〉标记的Java代码 185
11.2.2 Struts Bean标记库描述文件(struts-bean.tld) 190
11.2.3使用〈bean:page〉标记:整合所有部件 191
11.3 与Java标准标记库相比较 192
11.4结论 194
12Struts HTML标记:页面构造和表单处理 195
12 Struts HTML标记:页面构造和表单处理 195
12.1 Struts标记、JSP自定义标记以及Java Scriptlets:什么是正确的平衡 196
12.2 使用Struts HTML标记渲染HTML基本元素 197
12.2.2〈html:base〉标记 202
12.2.1 〈html:html〉标记 202
12.2.3 〈html:link〉和〈1html:rewrite〉标记 203
12.2.4 〈html:img〉标记 207
12.3基本的表单处理 208
12.3.1表单的基本知识:〈1html:form〉标记 212
12.3.2〈html:text〉标记 213
12.3.3〈html:cancel〉标记 213
12.3.4〈html:reset〉标记 215
12.3.5〈html:submit〉标记 216
12.3.6〈html:hidden〉标记 216
12.4复选框和单选框 217
12.4.1〈html:checkbox〉标记 223
12.4.2〈html:multibox〉标记 224
12.4.3〈html:radio〉标记 225
12.5下拉和选取/选项列表 225
12.5.1 〈html:select〉标记 231
12.5.2〈html:option〉标记 232
12.5.3〈html:options〉标记 233
12.5.4 〈html:optionsCollection〉标记 235
12.6 输入验证与〈html:errors〉 236
12.6.1 〈html:errors〉标记 240
12.6.2错误处理是如何工作的 241
12.6.3 为错误文本指定资源包,并对文本进行本地化 242
12.6.4指定全局的错误消息,相对于字段相关 243
12.6.5使用参数定制错误消息 243
12.7使用〈html:file〉上传文件 244
12.7.1〈html:file〉标记 249
12.7.2 在JSP文件中使用〈html:file〉 249
12.7.3在表单中指定私有的FormFile属性 250
12.7.4在Action类中处理文件上传 250
12.8结论 251
13 Struts Bean标记:保存与传输数据 253
13.1 使用Struts Bean标记来访问Servlet上下文的有关内容 253
13 Struts Bean标记:保存与传输数据 253
13.1.2〈bean:header〉标记 257
13.1.3〈bean:parameter〉标记 257
13.1.1〈bean:cookie〉标记 257
13.1.4〈bean:page〉标记 258
13.2使用Struts Bean标记来访问Java资源 258
13.2.1〈bean:message〉标记 261
13.2.2 〈bean:resource〉标记 262
13.2.3〈bean:struts〉标记 263
13.2.4〈bean:include〉标记 263
13.3使用Struts Bean标记来访问Bean属性 263
13.3.1〈bean:define〉标记 266
13.3.2〈bean:size〉标记 267
13.3.3〈bean:write〉标记 267
13.4结论 268
14 Struts逻辑标记:条件性表达逻辑 269
14 Struts逻辑标记:条件性表达逻辑 269
14.1 使用Struts逻辑标记进行基于值的条件显示 270
14.1.1 〈logic:equal〉和〈logic:notEqual〉标记 282
14.1.2〈logic:lessThan〉和〈1ogic:greaterThan〉标记 282
14.2使用Struts逻辑标记进行子串匹配 283
14.1.3〈logic:lessEqual〉和〈logic:greaterEqual〉标记 283
14.2.1〈logic:match〉与〈logic:notMatch〉标记 285
14.3使用Struts逻辑标记来迭代 285
14.3.1〈logic:iterate〉标记 287
14.4使用Struts逻辑标记来检测值是否存在 288
14.4.1〈logic:empty〉和〈logic:notEmpty〉标记 291
14.4.2〈logic:present〉和〈logic:notPresent〉标记 292
14.4.3〈logic:messagesPresent〉和〈logic:messagesNotPresent〉标记 292
14.5使用Struts逻辑标记来转移控制 292
14.5.1〈logic:forward〉标记 292
14.5.2〈logic:redirect〉标记 293
14.6结论 293
15 Struts嵌套与模板标记库:子属性处理与内容插入处理 295
15 Struts嵌套与模板标记库:子属性处理与内容插入处理 295
15.1使用Struts嵌套标记 296
15.2使用Struts模板标记 304
15.3结论 309
16 Struts Tiles标记库:创建主文档模板 311
16 Struts Tiles标记库:创建主文档模板 311
16.1Tiles总览 311
16.2启用Tiles 312
16.3定义之配置文件(Definitions Configuration File) 312
16.4为Tiles编写JSP文件 313
16.5修改Action 316
16.7Tiles的其它方面 317
16.6把所有部分整合到一起 317
16.8结论 318
17 DynaForm和验证器 319
17 DynaForm和验证器 319
17.1 DynaForm:不使用Java的表单 319
17.2 DynaBean和Struts 320
17.2.1〈form-property〉标记 326
17.3验证器:自动字段检验 328
17.3.1为NewUserAddress添加Validator 332
17.3.2最新的validator相关新闻 335
17.3.3定义新的验证 336
17.4结论 340
18结合EJB使用Struts 341
18.1 EJB适配Model组件 341
18结合EJB使用Struts 341
18.2 EJB技术的快速回顾 342
18.2.1 EJB存活在EJB容器中 342
18.2.2 EJB剖析 343
18.3.1 Entity Bean 344
18.3结合Struts使用不同的EJB类型 344
18.3.2无状态会话Bean(Stateless Session Bean) 345
18.3.3有状态会话Bean(Stateful Session Bean) 346
18.3.4消息驱动Bean(Message-Driven Bean) 346
18.3.6 Struts和EJB的未来方向 347
18.3.5结合EJB使用Struts的规则总结 347
18.4 Struts/EJB应用示例 348
18.4.1 应用示例:更新用户信息 348
18.4.2配置和建立应用 349
18.4.3检视示例应用的源文件 358
18.5结论 374
19结合Web服务使用Struts 375
19结合Web服务使用Struts 375
19.1 Web适配Struts的Model组件 376
19.2.1 Web服务通信如何工作 377
19.2快速回顾Web服务技术 377
19.2.2比较EJB和Web服务方法 378
19.2.3剖析Web服务 379
19.3如何结合Web服务使用Struts 380
19.4 Struts/Web服务的应用示例 381
19.4.1 应用:更新客户信息 381
19.4.2安装示例应用文件 382
19.4.3在构建环境中配置Axis 388
19.5结论 415
20构建、部署和测试Struts应用 417
20.1集成和渐增式的构建/测试循环:It s Extreme! 417
20构建、部署和测试Struts应用 417
20.2使用Jakarta Ant来构建和部署Struts应用 418
20.2.1推荐的开发目录结构 419
20.2.2被部署的应用(以及.war文件)所需的目录结构 420
20.3编写build.xml文件来使用Ant构建Struts应用 421
20.4使用集成和即时测试的Struts极限开发 429
20.4.1测试方法和工具的概述 429
20.4.2 JUnit:驱动即时测试(OngoingTesting)的引擎 430
20.4.3 Cactus:一个容器内测试框架 430
20.4.4 StrutsTestCase:用于测试Struts应用的JUnit扩展 431
20.5使用JUnit、StrutsTestCase和Ant进行模拟对象测试 431
20.5.1配置你的系统以运行模拟对象测试 433
20.5.2运行模拟测试用例并查看结果 436
20.5.3 在模拟测试用例中测试附加的Struts功能 437
20.5.4运行模拟测试用例并查看结果 439
20.6 使用Cactus、JUnit、StrutsTestCase和Ant进行容器内测试 440
20.6.1修改测试用例,以使用Cactus进行容器内测试 441
20.6.2修改你的系统配置来使用Cactus进行容器内测试 442
20.6.3运行容器内测试并查看结果 446
20.7结论 447
附录A从CD中安装Struts和示例应用 449
A.1 附带CD-ROM中包含的软件列表 449
附录A 从CD中安装Struts和示例应用 449
A.2第1步:安装JDK和Tomcat 450
A.3第2步:安装MySQL 450
A.4将WAR文件拷贝到Tomcat的webapps目录中 451
A.5重新启动Tomcat 452
索引 453
索引 453