第一篇 Struts 2基础篇 1
第1章 Struts 2概述 1
1.1 MVC概述 1
1.1.1 MVC设计模式 1
1.1.2 MVC的优点 3
1.1.3 Model 1和Model 2体系介绍 3
1.2 Struts 1简介 4
1.2.1 Struts 1框架介绍 5
1.2.2 Struts 1配置文件 6
1.2.3 Struts 1处理过程 8
1.2.4 Struts 1简单示例 9
1.3 WebWork概述1 14
1.4 Struts 2简介 15
1.4.1 Struts 2框架体系 15
1.4.2 Struts 2配置文件 16
1.4.3 Struts 2控制器 17
1.4.4 Struts 2标签库 18
1.4.5 与Struts 1、WebWork对比 19
第2章 Struts 2起步 22
2.1 搭建Struts 2开发环境 22
2.1.1 安装配置JDK 22
2.1.2 下载安装Tomcat 23
2.1.3 下载安装Struts 2 25
2.1.4 使用开发工具MyEclipse 26
2.2 Struts 2应用示例 28
2.2.1 web.xml配置文件 29
2.2.2 Action业务控制器 29
2.2.3 struts.xml配置文件 30
2.2.4 视图文件 31
2.2.5 运行示例 31
2.3 Struts 2的工作流程 32
2.3.1 核心控制器FilterDispatcher 32
2.3.2 业务控制器Action 34
2.3.3 业务逻辑组件 34
2.4 Struts 2中使用POJO 34
第3章 Struts 2配置详解 38
3.1 Struts 2配置文件 38
3.1.1 web.xml 38
3.1.2 struts.xml 40
3.1.3 struts-default.xml 44
3.1.4 struts.properties 46
3.1.5 struts-plugin.xml 48
3.1.6 静态内容 49
3.2 struts.xml配置详解 50
3.2.1 Bean配置 50
3.2.2 常量配置 51
3.2.3 包配置 53
3.2.4 命名空间配置 54
3.2.5 包含配置 56
3.2.6 拦截器配置 56
3.3 配置Action 57
3.3.1 Action实现类 58
3.3.2 间接访问Servlet API 59
3.3.3 直接访问Servlet API 62
3.3.4 Action配置 65
3.3.5 动态方法调用 66
3.3.6 使用method属性 68
3.3.7 通配符映射 70
3.3.8 默认Action 71
3.4 配置Result 71
3.4.1 结果映射 72
3.4.2 结果类型 73
3.4.3 dispatcher结果类型 75
3.4.4 redirect结果类型 76
3.4.5 redirectAction结果类型 77
3.4.6 其他结果类型 78
3.4.7 使用通配符动态配置result 82
3.4.8 使用OGNL动态配置result 83
3.5 使用注解配置Action 84
3.5.1 与Action配置相关的注解 84
3.5.2 使用注解配置Action的注意事项 86
3.5.3 使用注解配置Action示例 87
第4章 国际化与异常处理 90
4.1 软件国际化 90
4.2 Java国际化 91
4.2.1 Java对国际化的支持 91
4.2.2 Java支持的语言和区域 94
4.2.3 使用资源文件 95
4.2.4 使用资源类文件 97
4.2.5 MessageFormat类 100
4.3 Struts 2国际化 101
4.3.1 配置资源文件 101
4.3.2 Struts 2国际化应用 102
4.3.3 使用占位符 105
4.3.4 包范围资源文件 108
4.3.5 Action范围资源文件 111
4.3.6 临时资源文件 112
4.3.7 加载资源文件的顺序 114
4.4 动态访问国际化资源文件 115
4.4.1 动态访问国际化资源文件原理 115
4.4.2 建立资源文件 116
4.4.3 建立Action和JSP 116
4.4.4 动态访问资源运行结果 117
4.5 Struts 2异常处理 118
4.5.1 传统异常处理方式 118
4.5.2 Struts 2异常处理机制 120
4.5.3 配置异常处理 121
4.5.4 异常处理实例 122
第5章 拦截器 125
5.1 拦截器介绍 125
5.1.1 AOP介绍 125
5.1.2 拦截的实现原理 126
5.1.3 拦截的意义 127
5.2 Struts 2拦截器 128
5.2.1 Struts 2拦截器原理 128
5.2.2 配置拦截器 129
5.2.3 使用拦截器 131
5.2.4 自定义默认拦截器 133
5.2.5 使用拦截器注解 134
5.3 自定义拦截器 137
5.3.1 自定义拦截器类 137
5.3.2 使用自定义拦截器 139
5.4 拦截器深度剖析 142
5.4.1 拦截器的方法过滤 142
5.4.2 拦截器的执行顺序 146
5.4.3 拦截结果监听器 147
5.4.4 设置拦截器栈中拦截器参数 149
5.5 Struts 2框架的系统拦截器 152
5.5.1 系统拦截器 152
5.5.2 timer拦截器实例 157
5.6 权限拦截器实例 158
5.6.1 权限拦截器 158
5.6.2 配置拦截器 159
5.6.3 业务控制器Action 159
5.6.4 JSP视图 160
5.6.5 运行程序 160
第6章 类型转换 161
6.1 传统的类型转换 161
6.2 编写一个类型转换器 162
6.2.1 类型转换需求 162
6.2.2 编写自定义类型转换器 164
6.2.3 视图资源文件 165
6.2.4 运行示例 166
6.3 自定义类型转换器 166
6.3.1 基于OGNL的类型转换器 166
6.3.2 基于Struts 2的类型转换器 167
6.3.3 注册自定义类型转换器 168
6.3.4 数组属性类型转换器 171
6.3.5 集合属性类型转换器 173
6.4 使用Struts 2的类型转换 174
6.4.1 Struts 2系统内建的类型转换器 174
6.4.2 null属性的处理 174
6.4.3 项目应用中常见的类型转换 175
6.4.4 使用OGNL表达式 177
6.4.5 使用集合类型属性 179
6.4.6 使用Set类型属性 182
6.5 类型转换中的异常处理 185
6.5.1 类型转换异常拦截器 185
6.5.2 一个简单的类型转换异常处理 186
6.5.3 改进类型转换异常显示信息 188
6.5.4 处理复合类型转换异常 188
6.6 使用类型转换注解 189
6.6.1 TypeConversion注解 190
6.6.2 Conversion注解 191
6.6.3 Element注解 192
6.6.4 Key注解 192
6.6.5 KeyProperty注解 192
6.6.6 CreateIfNull注解 193
第7章 输入校验 194
7.1 输入校验介绍 194
7.1.1 输入校验的原因 194
7.1.2 客户端和服务器端校验 195
7.2 使用validate进行输入校验 197
7.2.1 validate()方法输入校验 197
7.2.2 validateXxx()方法输入校验 199
7.2.3 输入校验流程 202
7.3 基本输入校验 203
7.3.1 定义校验规则 203
7.3.2 字段校验器配置风格 205
7.3.3 非字段校验器配置风格 206
7.3.4 输入校验的国际化信息 207
7.3.5 校验的搜索顺序 208
7.4 复合类型属性的输入校验 212
7.4.1 复合属性的校验 212
7.4.2 集合属性的校验 215
7.5 Struts 2框架的校验器 217
7.5.1 内建校验器 217
7.5.2 必填校验器 218
7.5.3 必填字符串校验器 220
7.5.4 字符串长度校验器 222
7.5.5 整数校验器 223
7.5.6 类型转换校验器 224
7.5.7 日期校验器 226
7.5.8 浮点数值校验器 227
7.5.9 邮件地址校验器 228
7.5.10 网址校验器 229
7.5.11 表达式校验器 231
7.5.12 字段表达式校验器 232
7.5.13 正则表达式校验器 234
7.5.14 visitor校验器 235
7.6 自定义校验器 236
第8章 OGNL 239
8.1 OGNL简介 239
8.2 OGNL表达式 239
8.2.1 常量 240
8.2.2 操作符 240
8.2.3 调用方法 241
8.2.4 索引访问 242
8.2.5 对集合进行操作 244
8.3 OGNL的简单应用 246
8.4 Struts 2的OGNL 247
第二篇 Struts 2框架技术篇 253
第9章 Struts 2标签库 253
9.1 Struts 2标签库概述 253
9.1.1 标签库简介 253
9.1.2 Struts 2标签库组成 254
9.2 控制标签 255
9.2.1 if/elseif/else标签 256
9.2.2 iterator标签 257
9.2.3 append标签 258
9.2.4 generator标签 259
9.2.5 merge标签 259
9.2.6 subset标签 261
9.2.7 sort标签 262
9.3 数据标签 264
9.3.1 action标签 264
9.3.2 bean标签 266
9.3.3 date标签 268
9.3.4 debug标签 269
9.3.5 include标签 269
9.3.6 param标签 270
9.3.7 push标签 271
9.3.8 set标签 272
9.3.9 url标签 273
9.3.10 property标签 274
9.4 主题与模板 275
9.4.1 主题 275
9.4.2 模板 276
9.4.3 使用主题模板 276
9.5 表单标签 277
9.5.1 表单标签通用属性 277
9.5.2 checkboxlist标签 278
9.5.3 combobox标签 280
9.5.4 doubleselect标签 281
9.5.5 datetimepicker标签 282
9.5.6 head标签 283
9.5.7 file标签 284
9.5.8 hidden标签 284
9.5.9 select标签 284
9.5.10 optiontransferselect标签 285
9.5.11 radio标签 287
9.5.12 optgroup标签 288
9.5.13 token标签 289
9.5.14 textfield、password和textarea标签 290
9.5.15 updownselect标签 291
9.6 非表单标签 292
9.6.1 actionerror和actionmessage标签 292
9.6.2 component标签 293
9.6.3 tree和treenode标签 294
第10章 Struts 2数据库应用 296
10.1 MySQL下载和安装 296
10.1.1 下载MySQL数据库 296
10.1.2 安装MySQL数据库服务器 297
10.1.3 下载MySQL JDBC驱动 298
10.2 访问MySQL数据库 298
10.2.1 创建一个数据库 298
10.2.2 建立JDBC连接 299
10.3 使用Tomcat数据源 300
10.4 Struts 2数据分页 304
10.5 Struts 2数据库操作 309
10.5.1 添加用户 310
10.5.2 修改用户 312
10.5.3 删除用户 316
第11章 文件上传与下载 319
11.1 文件上传 319
11.1.1 基于表单的文件上传设置 319
11.1.2 手动上传文件 322
11.1.3 Struts 2对文件上传的支持 325
11.1.4 在Struts 2中实现文件上传 325
11.1.5 实现上传文件过滤 328
11.2 多个文件同时上传 330
11.2.1 使用数组同时上传多个文件 330
11.2.2 使用List同时上传多个文件 333
11.3 文件下载 335
11.3.1 Struts 2实现文件下载 335
11.3.2 下载权限控制 337
第12章 避免表单重复提交与等待页面 340
12.1 避免表单重复提交 340
12.2 Struts 2的实现方式 341
12.3 使用token拦截器 342
12.4 使用tokenSession拦截器 345
12.5 自动显示等待页面 346
12.6 使用execAndWait拦截器 347
第13章 Struts 2应用程序安全性 350
13.1 系统攻击的实现因素 350
13.2 Web应用程序的攻击类型 350
13.3 用户和角色 351
13.4 编写安全策略 352
13.4.1 保护资源 352
13.4.2 指定登录方法 353
13.5 身份验证方法 354
13.5.1 基本身份验证方法 354
13.5.2 基于表单的身份验证方法 356
13.6 Struts 2的安全配置 358
13.7 以编程方式提高安全性 359
13.7.1 getAuthType()方法 359
13.7.2 isUserInRole()方法 360
13.7.3 getUserPrincipal()方法 361
13.7.4 getRemoteUser()方法 362
第14章 Struts 2对Ajax的支持 363
14.1 Ajax快速入门 363
14.1.1 Ajax简介 363
14.1.2 XMLHttpRequest 364
14.2 Ajax应用开发 370
14.2.1 使用XML作为数据的载体 370
14.2.2 使用JSON串作为数据的载体 373
14.2.3 使用Dojo简化Ajax应用的开发 382
14.3 在Struts 2中使用JSON 385
14.4 Struts 2的Ajax标签 390
14.4.1 Struts 2的Ajax支持 390
14.4.2 div标签 394
14.4.3 a标签 402
14.4.4 submit标签 405
14.4.5 tabbedPanel标签 406
14.4.6 autocompleter标签 408
第三篇 Struts 2整合其他技术篇 413
第15章 整合Spring 413
15.1 Spring概述 413
15.1.1 Spring框架组件 413
15.1.2 Spring的优点 415
15.1.3 下载安装Spring 415
15.1.4 IoC和DI 415
15.2 Struts 2整合Spring 418
15.2.1 原理介绍 418
15.2.2 整合步骤 418
15.2.3 整合示例 419
第16章 整合Hibernate 426
16.1 Hibernate简介 426
16.1.1 Hibernate的优点 426
16.1.2 理解Hibernate架构 427
16.1.3 Hibernate核心接口 427
16.2 Struts 2整合Hibernate 428
16.2.1 下载安装Hibernate 428
16.2.2 Struts 2与Hibernate的整合方案 429
16.2.3 功能设计与数据库设计 429
16.2.4 Hibernate映射对象到数据库 430
16.2.5 hibernate.cfg.xml配置文件 432
16.2.6 HibernateSessionFactory类文件 433
16.2.7 数据库操作DAO 434
16.2.8 业务控制Action 436
16.2.9 struts.xml配置文件 440
16.2.10 视图文件 442
16.2.11 校验文件 446
16.2.12 运行程序 446
第17章 整合JSF 449
17.1 JSF介绍 449
17.1.1 JSF的优势 449
17.1.2 JSF体系 451
17.1.3 与Struts 2比较 451
17.1.4 JSF的简单应用 452
17.1.5 下载MyFaces 456
17.2 Struts 2整合MyFaces 457
17.2.1 整合原理 457
17.2.2 整合步骤 457
17.2.3 整合示例 458
第18章 整合其他框架技术 467
18.1 整合SiteMesh 467
18.1.1 SiteMesh简介 467
18.1.2 下载安装SiteMesh 468
18.1.3 SiteMesh的简单应用 469
18.1.4 更复杂的装饰器页面 472
18.1.5 Struts 2中使用SiteMesh 475
18.2 整合FreeMarker 480
18.2.1 FreeMarker简介 480
18.2.2 FreeMarker的简单应用 481
18.2.3 FreeMarker常用指令 483
18.2.4 Struts 2中使用FreeMarker 486
18.3 整合Tiles 491
18.3.1 Tiles简介 492
18.3.2 下载安装Tiles 492
18.3.3 Tiles的简单应用 493
18.3.4 Struts 2中使用Tiles 497
18.4 整合Struts 1 502
18.5 整合JFreeChart 506
18.5.1 JFreeChart简介 507
18.5.2 下载安装JFreeChart 507
18.5.3 JFreeChart的简单应用 508
18.5.4 Struts 2中使用JFreeChart 509
第四篇 Struts 2综合实例篇 515
第19章 用户注册系统 515
19.1 系统概述 515
19.1.1 系统分析与设计 515
19.1.2 系统结构 516
19.2 数据库设计 517
19.3 DAO组件 518
19.3.1 创建实体类 518
19.3.2 实现DAO组件 519
19.4 用户注册模块 522
19.4.1 用户注册页面 522
19.4.2 Action类 524
19.4.3 校验文件 525
19.4.4 struts.xml文件 527
19.4.5 效果演示 527
19.5 浏览用户信息模块 528
19.5.1 Action类 528
19.5.2 权限控制 529
19.5.3 struts.xml文件 530
19.5.4 用户列表页面 531
19.5.5 效果演示 532
第20章 企业BBS系统 533
20.1 系统分析和设计 533
20.1.1 需求分析 533
20.1.2 系统功能模块 533
20.2 数据库设计 535
20.3 系统实体及其关联关系 536
20.4 实现Hibernate持久层 536
20.4.1 创建持久化类 537
20.4.2 映射持久化类 538
20.4.3 连接数据库 541
20.5 实现DAO组件层 542
20.5.1 创建SessionFactory 542
20.5.2 实现DAO 544
20.6 Web层实现 550
20.6.1 回复列表的实现 550
20.6.2 对帖子的管理 553
20.6.3 JSP嵌入文本编辑器 558
20.6.4 图形验证码的实现 559
第21章 电子相册系统 562
21.1 系统分析和设计 562
21.1.1 需求分析 562
21.1.2 系统功能模块 562
21.2 数据库设计 564
21.2.1 数据库建表 564
21.2.2 系统实体及其关联关系 566
21.3 实现Hibernate持久层 566
21.3.1 创建持久化类 566
21.3.2 编写持久化类的映射配置文件 568
21.3.3 配置Hibernate的SessionFactory 571
21.4 实现DAO组件层 572
21.4.1 实现DAO组件 572
21.4.2 DAO组件配置 577
21.5 实现业务逻辑层 578
21.5.1 实现业务逻辑组件 578
21.5.2 配置业务逻辑组件 582
21.6 实现Wed层 583
21.6.1 列出相册列表 583
21.6.2 上传相片 586
21.6.3 查看相片列表 589
21.6.4 查看相片和发表相片评论 591