第1章 Struts 2概述 1
1.1 MVC思想概述 2
1.1.1 Web技术的发展 2
1.1.2 Model 1和Model 2 4
1.1.3 MVC思想及其优势 5
1.1.4 常用的MVC框架 7
1.2 Struts 2的起源和背景 8
1.2.1 Struts 1简介及存在的问题 8
1.2.2 WebWork简介 11
1.2.3 Struts 2起源 15
1.3 Struts 2体系介绍 15
1.3.1 Struts 2框架架构 15
1.3.2 Struts 2的配置文件 16
1.3.3 Strut 2的标签库 17
1.3.4 Struts 2的控制器组件 18
1.4 Struts 2与Struts 1的对比 20
1.5 WebWork和Struts 2对比 21
1.6 本章小结 22
第2章 Struts 2下的HelloWorld 23
2.1 下载和安装Struts 2框架 23
2.2 从用户请求开始 25
2.3 创建Struts 2的Web应用 26
2.3.1 创建Web应用 26
2.3.2 增加Struts 2功能 27
2.4 实现控制器 28
2.4.1 实现控制器类 28
2.4.2 配置Action 29
2.4.3 增加视图资源完成应用 30
2.5 改进控制器 31
2.5.1 实现Action接口 31
2.5.2 跟踪用户状态 33
2.5.3 添加处理信息 34
2.5.4 输出处理信息 36
2.6 改进视图组件 38
2.6.1 改善输出页面 38
2.6.2 使用UI标签简化表单页面 39
2.7 完成程序国际化 41
2.7.1 定义国际化资源文件 41
2.7.2 加载资源文件 42
2.7.3 输出国际化信息 43
2.8 增加数据校验 45
2.8.1 继承ActionSupport 45
2.8.2 使用Struts 2的校验框架 48
2.9 本章小结 49
第3章 Struts 2基础 50
3.1 Struts 1的MVC实现 50
3.1.1 下载和安装Struts 1框架 51
3.1.2 实现ActionForm 51
3.1.3 实现Action 53
3.1.4 配置Struts 1的Action 54
3.1.5 完成应用流程 56
3.2 WebWork的MVC实现 57
3.2.1 WebWork的下载和安装 57
3.2.2 实现Action 58
3.2.3 配置Action 61
3.2.4 完成数据校验 63
3.2.5 完成应用流程 64
3.3 在Eclipse中开发Struts 2 65
3.3.1 创建Web应用 65
3.3.2 增加Struts 2支持 67
3.3.3 部署Struts 2应用 68
3.3.4 增加应用的Action 69
3.4 Struts 2的基本流程 71
3.4.1 核心控制器:FilterDispatcher 71
3.4.2 业务控制器 72
3.4.3 Struts 2的模型组件 72
3.4.4 Struts 2的视图组件 72
3.4.5 Struts 2的运行流程 73
3.5 Struts 2的基本配置 73
3.5.1 配置web.xml文件 73
3.5.2 struts.xml配置文件 75
3.5.3 struts.properties配置文件 79
3.5.4 struts.xml文件结构 82
3.6 本章小结 86
第4章 深入Struts 2 87
4.1 深入Struts 2的配置文件 87
4.1.1 Bean配置 88
4.1.2 常量配置 89
4.1.3 包配置 91
4.1.4 命名空间配置 93
4.1.5 包含配置 94
4.1.6 拦截器配置 95
4.2 Struts 2的Action 96
4.2.1 实现Action实现类 96
4.2.2 Action访问Servlet API 100
4.2.3 Action直接访问Servlet API 104
4.2.4 配置Action 106
4.2.5 动态方法调用 107
4.2.6 为action元素指定method属性 110
4.2.7 使用通配符 111
4.2.8 默认Action 116
4.3 处理结果 117
4.3.1 处理结果的改进 117
4.3.2 配置结果 118
4.3.3 Struts 2支持的处理结果类型 119
4.3.4 plaintext结果类型 122
4.3.5 redirect结果类型 124
4.3.6 redirect-action结果类型 125
4.3.7 动态结果 126
4.3.8 请求参数决定结果 127
4.3.9 全局结果 129
4.4 属性驱动和模型驱动 130
4.4.1 模型的作用 130
4.4.2 使用模型驱动 132
4.5 Struts 2的异常机制 135
4.5.1 Struts 2的异常处理哲学 135
4.5.2 声明式异常捕捉 137
4.5.3 输出异常信息 139
4.6 本章小结 141
第5章 Struts 2的类型转换 142
5.1 类型转换的意义 142
5.1.1 表现层数据处理 143
5.1.2 类型转换 143
5.2 使用类型转换器 146
5.2.1 系统需求 147
5.2.2 实现类型转换器 148
5.2.3 局部类型转换器 151
5.2.4 全局类型转换器 152
5.2.5 基于Struts 2的类型转换器 154
5.2.6 数组属性的类型转换器 155
5.2.7 集合属性的类型转换器 158
5.3 另一种转换方式 161
5.4 Struts 2的Collection和Map支持 164
5.4.1 指定集合元素的类型 164
5.4.2 指定集合元素的索引属性 165
5.5 Struts 2内建的类型转换器 167
5.6 类型转换中错误处理 168
5.6.1 类型转换的错误处理流程 168
5.6.2 处理类型转换错误 169
5.6.3 输出类型转换错误 170
5.6.4 处理集合属性的转换错误 172
5.7 本章小结 173
第6章 文件的上传和下载 174
6.1 文件上传的原理 175
6.1.1 表单元素的enctype属性 175
6.1.2 手动上传 178
6.1.3 使用上传框架完成上传 180
6.2 Struts 2的文件上传 185
6.2.1 Struts 2提供的文件上传支持 185
6.2.2 实现文件上传的Action 186
6.2.3 配置文件上传的Action 189
6.2.4 手动实现文件过滤 191
6.2.5 拦截器实现文件过滤 194
6.2.6 输出错误提示 195
6.2.7 文件上传的常量配置 196
6.3 同时上传多个文件 197
6.3.1 使用数组同时上传多个文件 197
6.3.2 使用List同时上传多个文件 200
6.4 文件下载 202
6.4.1 使用Struts 2控制文件下载 202
6.4.2 实现文件下载的Action 203
6.4.3 配置Action 204
6.4.4 下载前的授权控制 205
6.5 本章小结 206
第7章 Struts 2的拦截器 207
7.1 理解拦截器 208
7.1.1 理解DRY规则 208
7.1.2 拦截器的意义 209
7.1.3 拦截器的实现原理 210
7.1.4 拦截器和AOP的关系 214
7.1.5 拦截器在Struts 2中的作用 215
7.2 拦截器配置初步 216
7.2.1 配置拦截器 216
7.2.2 使用拦截器 218
7.2.3 默认拦截器 219
7.3 使用自定义拦截器 221
7.3.1 实现拦截器类 222
7.3.2 使用拦截器 223
7.4 深入拦截器 225
7.4.1 方法过滤 225
7.4.2 拦截器的执行顺序 227
7.4.3 拦截结果的监听器 229
7.4.4 覆盖拦截器中特定拦截器的参数 230
7.5 Struts 2内建的拦截器 233
7.5.1 内建拦截器 233
7.5.2 struts-default.xml中的拦截器配置 234
7.6 使用拦截器完成权限控制 238
7.6.1 实现权限控制拦截器 238
7.6.2 配置权限控制拦截器 239
7.7 本章小结 240
第8章 Struts 2的输入校验 242
8.1 输入校验概述 242
8.1.1 为什么需要输入校验 243
8.1.2 客户端校验 244
8.1.3 服务器端校验 246
8.1.4 类型转换和输入校验 250
8.2 手动完成输入校验 251
8.2.1 重写validate()方法 251
8.2.2 重写validateXxx()方法 254
8.2.3 Struts 2的输入校验流程 256
8.3 基本输入校验 257
8.3.1 编写校验规则文件 257
8.3.2 国际化提示信息 259
8.3.3 使用客户端校验 261
8.3.4 校验文件的搜索规则 265
8.4 校验器的配置风格 267
8.4.1 字段校验器配置风格 267
8.4.2 非字段校验器配置风格 268
8.4.3 短路校验器 269
8.4.4 校验顺序和短路 271
8.5 内建校验器 272
8.5.1 注册校验器 272
8.5.2 必填校验器 273
8.5.3 必填字符串校验器 274
8.5.4 整数校验器 275
8.5.5 日期校验器 276
8.5.6 表达式校验器 277
8.5.7 字段表达式校验器 277
8.5.8 邮件地址校验器 278
8.5.9 网址校验器 279
8.5.10 Visitor校验器 279
8.5.11 转换校验器 283
8.5.12 字符串长度校验器 283
8.5.13 正则表达式校验器 284
8.6 本章小结 285
第9章 Struts 2的国际化 286
9.1 程序国际化简介 287
9.1.1 程序国际化的意义 287
9.1.2 Java国际化的思路 287
9.1.3 Java支持的语言和国家 288
9.1.4 完成程序国际化 289
9.1.5 带占位符的消息 291
9.1.6 使用类文件代替资源文件 292
9.2 Struts 2的国际化入门 293
9.2.1 Struts 2中加载全局资源文件 293
9.2.2 访问国际化消息 294
9.2.3 输出带占位符的国际化消息 296
9.3 加载资源文件的方式 299
9.3.1 包范围资源文件 299
9.3.2 Action范围资源文件 300
9.3.3 临时指定资源文件 301
9.3.4 加载资源文件的顺序 302
9.4 允许用户自行选择程序语言 303
9.4.1 Struts 2国际化的运行机制 303
9.4.2 创建下拉列表框 304
9.4.3 选择程序语言 307
9.5 本章小结 308
第10章 Struts 2的标签库 309
10.1 Struts 2标签库概述 310
10.1.1 标签的优势 310
10.1.2 Struts 2的标签分类 311
10.2 Struts 2标签初步 312
10.2.1 使用Struts 2标签库的准备 312
10.2.2 Struts 2的OGNL 314
10.2.3 OGNL中的集合操作 316
10.2.4 Lambda(λ)表达式 317
10.3 控制标签 318
10.3.1 if/elseif/else标签 318
10.3.2 iterator标签 319
10.3.3 append标签 321
10.3.4 generator标签 323
10.3.5 merge标签 324
10.3.6 subset标签 325
10.3.7 sort标签 327
10.4 数据标签 329
10.4.1 action标签 329
10.4.2 bean标签 331
10.4.3 date标签 333
10.4.4 debug标签 334
10.4.5 include标签 335
10.4.6 param标签 336
10.4.7 push标签 337
10.4.8 set标签 337
10.4.9 url标签 339
10.4.10 property标签 340
10.5 主题和模板 340
10.5.1 选择主题 340
10.5.2 创建自定义主题 342
10.5.3 Struts 2内建主题 344
10.6 表单标签 345
10.6.1 表单标签的通用属性 345
10.6.2 表单标签的name和value属性 347
10.6.3 checkboxlist标签 348
10.6.4 combobox标签 350
10.6.5 datetimepicker标签 351
10.6.6 doubleselect标签 352
10.6.7 head标签 354
10.6.8 optiontransferselect标签 355
10.6.9 select标签 357
10.6.10 radio标签 357
10.6.11 optgroup标签 359
10.6.12 token标签 360
10.6.13 updownselect标签 360
10.7 非表单标签 362
10.7.1 actionerror和actionmessage标签 362
10.7.2 component标签 363
10.7.3 tree和treenode初步 365
10.8 本章小结 366
第11章 Struts 2的Ajax支持 367
11.1 Ajax概述 368
11.1.1 Ajax的起源和变革 368
11.1.2 Ajax的核心技术 371
11.2 Struts 2提供的Ajax支持 373
11.3 基于Ajax的输入校验 374
11.3.1 配置DWR的核心Servlet 375
11.3.2 设置页面的Ajax主题 376
11.3.3 设置校验规则 377
11.4 使用Ajax表单 378
11.4.1 设置表单的Ajax主题 379
11.4.2 实现Action 380
11.4.3 实现服务器响应页面 381
11.5 pub-sub的事件模型 382
11.5.1 pub-sub的原理 382
11.5.2 pub-sub的示例 384
11.5.3 阻止请求 385
11.6 常用的Ajax标签 386
11.6.1 div标签 386
11.6.2 a和submit标签 392
11.6.3 autocompleter标签 398
11.6.4 tabbedPanel标签 403
11.7 使用JSON插件实现Ajax 407
11.7.1 JSON的基本知识 407
11.7.2 为Struts 2安装JSON插件 410
11.7.3 实现Actio逻辑 411
11.7.4 实现JSP页面 413
11.8 本章小结 415
第12章 使用FreeMarker充当表现层 416
12.1 体验FreeMarker 417
12.1.1 在Java程序中使用FreeMarker 417
12.1.2 在Web应用中使用FreeMarker 419
12.2 FreeMarker的模板文件 421
12.2.1 模板结构 421
12.2.2 FTL指令规则 421
12.2.3 插值规则 422
12.3 表达式 423
12.3.1 直接指定值 423
12.3.2 输出变量值 425
12.3.3 字符串操作 427
12.3.4 集合连接运算符 428
12.3.5 Map连接运算符 428
12.3.6 算术运算符 429
12.3.7 比较运算符 429
12.3.8 逻辑运算符 430
12.3.9 内建函数 430
12.3.10 空值处理运算符 431
12.3.11 运算符优先级 431
12.4 FreeMarker的常用指令 431
12.4.1 if指令 432
12.4.2 switch、case、default、break指令 432
12.4.3 list、break指令 433
12.4.4 include指令 433
12.4.5 import指令 434
12.4.6 noparse指令 434
12.4.7 escape、noescape指令 434
12.4.8 assign指令 436
12.4.9 setting指令 437
12.4.10 macro、nested、retum指令 437
12.5 使用FreeMarker作为Struts 2的视图技术 440
12.5.1 在FreeMarker模板中使用Struts 2标签 440
12.5.2 使用Freemarker Result 442
12.5.3 解析模板中的变量 444
12.5.4 访问Servlet/JSP范围对象 446
12.6 本章小结 448
第13章 整合Spring 449
13.1 Spring简介 450
13.1.1 Spring的起源和核心 450
13.1.2 使用Spring的IoC容器 452
13.2 Struts 2插件 455
13.2.1 插件概述 455
13.2.2 插件开发概述 456
13.3 使用Spring插件完成整合 458
13.3.1 整合Spring前的准备工作 458
13.3.2 整合Spring的思考 461
13.4 让Spring管理控制器 462
13.4.1 整合流程 462
13.4.2 从页面请求开始 463
13.4.3 实现控制器逻辑 463
13.4.4 实现业务逻辑 465
13.5 使用自动装配 467
13.5.1 指定自动装配 467
13.5.2 修改配置文件 468
13.5.3 改变自动装配策略 469
13.6 本章小结 470
第14章 整合JSF 471
14.1 JSF简介 471
14.1.1 JSF概述 472
14.1.2 JSF和Struts 2的对比 472
14.2 使用MyFaces 473
14.2.1 下载和安装MyFaces 473
14.2.2 从输入页面开始 475
14.2.3 在Web应用中配置MyFaces 477
14.2.4 实现后台Bean 478
14.2.5 定义导航规则 480
14.3 安装JSF插件 482
14.4 使用JSF插件 483
14.4.1 实现业务逻辑组件 483
14.4.2 列出全部图书 487
14.4.3 添加/修改图书 489
14.5 整合JSF的思考 494
14.6 本章小结 496
第15章 整合SiteMesh 497
15.1 SiteMesh简介 498
15.1.1 SiteMesh概述 498
15.1.2 下载和安装SiteMesh 498
15.1.3 定义装饰器页面 501
15.1.4 定义原始页面 503
15.1.5 更复杂的装饰器页面 504
15.2 使用SiteMesh插件 507
15.2.1 安装SiteMesh插件 507
15.2.2 在Struts 2中使用SiteMesh 509
15.3 使用FreeMarker模板作为装饰器 512
15.3.1 使用FreeMarkerPageFilter 512
15.3.2 定义FreeMarker装饰器 513
15.3.3 使用SiteMesh标签 515
15.4 本章小结 516
第16章 整合JasperReports 517
16.1 JasperReports简介 518
16.1.1 下载和安装JasperReports 518
16.1.2 JasperReports初探 519
16.1.3 JasperReports的开发流程 525
16.1.4 解决PDF报表的中文问题 526
16.2 动态报表 527
16.2.1 带参数的报表 527
16.2.2 带查询的报表 532
16.3 使用iReport设计报表 539
16.3.1 下载和安装iReport 539
16.3.2 使用iReport 541
16.3.3 建立数据库连接 542
16.3.4 设计报表布局 544
16.4 安装JasperReports插件 546
16.5 使用JasperReports报表 547
16.5.1 创建生成报表的Action 547
16.5.2 配置生成JasperReports报表的Action 548
16.5.3 生成JasperReports报表 549
16.6 本章小结 550
第17章 整合JFreeChart 552
17.1 JFreeChart简介 553
17.1.1 JFreeChart的下载和安装 553
17.1.2 使用JFreeChart 554
17.1.3 JFreeChart开发步骤 556
17.2 JFreeChart的常用统计图表 557
17.2.1 柱状图 557
17.2.2 折线图 561
17.2.3 时间顺序图 562
17.3 在网页中生成带交互功能的统计图 564
17.4 安装JFreeChart插件 569
17.5 在Struts 2应用中使用JFreeChart 570
17.5.1 创建Action类 570
17.5.2 配置Action 571
17.6 本章小结 573
第18章 整合Struts 1 574
18.1 整合Struts 1的概述 574
18.2 安装Struts 1插件 575
18.2.1 Struts 1插件分析 575
18.2.2 安装Struts 1插件 577
18.3 整合Struts 1 577
18.3.1 从请求开始 577
18.3.2 管理Struts 1的ActionForm 578
18.3.3 管理Struts 1的Action 579
18.3.4 管理无需ActionForm的Action 582
18.4 使用Struts 1的输入校验 583
18.4.1 重写validate方法 583
18.4.2 使用Common-Validator校验 586
18.5 本章小结 589
第19章 整合Hibernate 590
19.1 Hibernate概述 591
19.1.1 Hibernate的作用 591
19.1.2 Hibernate的优势 593
19.2 Hibernate开发入门 593
19.2.1 Hibernate下载和安装 593
19.2.2 使用Hibernate保存记录 594
19.2.3 使用Hibernate查询记录 598
19.3 Struts 2整合Hibernate的思考 600
19.3.1 自定义的整合方案 601
19.3.2 整合方案的实现策略 602
19.4 整合示例 602
19.4.1 持久层设计 602
19.4.2 DAO层设计 606
19.4.3 业务逻辑层设计 608
19.4.4 控制器实现 611
19.5 整合后的思考和Spring框架 612
19.6 本章小结 614
第20章 注册登录系统 615
20.1 系统概述 616
20.1.1 系统功能简介 616
20.1.2 系统总体设计 616
20.2 实现Hibernate持久层 617
20.2.1 编写持久化PO类 617
20.2.2 编写映射文件 618
20.3 实现DAO层 619
20.3.1 管理SessionFactory 619
20.3.2 编写DAO接口 620
20.3.3 实现DAO组件 622
20.3.4 配置DAO组件 624
20.4 实现业务逻辑层 624
20.4.1 定义业务逻辑组件接口 624
20.4.2 提供业务逻辑组件实现类 625
20.4.3 配置业务逻辑组件 627
20.5 使用Struts 2 629
20.5.1 整合Struts 2和Spring 629
20.5.2 处理登录 630
20.5.3 图形验证码 634
20.5.4 异常控制 638
20.5.5 使用Ajax验证用户名 638
20.5.6 注册新用户 641
20.6 使用SiteMesh装饰页面 644
20.7 本章小结 646
第21章 电子拍卖系统 647
21.1 系统功能简介和架构设计 648
21.1.1 系统功能简介 648
21.1.2 系统架构设计 648
21.1.3 相关技术介绍 649
21.2 持久层设计 652
21.2.1 系统实体 652
21.2.2 系统E-R图和数据表 653
21.2.3 实现Hibernate PO 655
21.2.4 管理SessionFactory 664
21.3 实现系统DAO层 665
21.3.1 DAO的基础配置 667
21.3.2 实现系统DAO组件 667
21.3.3 配置系统DAO组件 674
21.4 实现业务逻辑层 675
21.4.1 定义业务逻辑组件接口 675
21.4.2 依赖注入DAO组件 677
21.4.3 业务逻辑组件中的异常处理 678
21.4.4 处理用户竞价 680
21.4.5 判断拍卖物品状态 682
21.4.6 事务管理 685
21.4.7 配置业务层组件 686
21.5 实现系统Web层 689
21.5.1 配置Struts 2的核心Filter 689
21.5.2 处理用户登录 690
21.5.3 图形验证码 694
21.5.4 Web层的异常处理 695
21.5.5 登录控制 696
21.5.6 添加物品 698
21.5.7 处理用户竞价 705
21.6 使用SiteMesh页面装饰 711
21.6.1 在Struts2中整合SiteMesh页面装饰 711
21.6.2 定义页面装饰 712
21.7 本章小结 715