第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 2体系介绍 4
1.2.1 核心控制器 4
1.2.2 业务处理器Action 5
1.2.3 Struts 2配置文件 5
1.2.4 Struts 2的控制器组件 6
1.2.5 Struts 2的标签库 7
1.3 搭建Struts 2开发环境 8
1.3.1 安装配置JDK 8
1.3.2 下载安装Tomcat 9
1.3.3 下载安装Struts 2 10
1.3.4 使用MyEclipse开发工具 11
1.4 Struts 2应用示例 13
1.4.1 配置web.xml文件 13
1.4.2 Action业务控制器 14
1.4.3 struts.xml配置文件 14
1.4.4 添加视图文件完成应用 15
1.4.5 运行实例 15
1.5 在Struts 2中使用POJO 16
1.6 项目案例:编写简单的登录验证系统 18
1.7 习题 19
1.8 实践疑难解答 20
1.8.1 Struts 2接收日期格式赋值错误 20
1.8.2 关于Struts 2标签的一个问题 21
第2章 Struts 2配置详解 22
2.1 Struts 2的配置文件 22
2.1.1 web.xml 22
2.1.2 struts.xml 23
2.1.3 struts-default.xml 26
2.1.4 struts.properties 27
2.1.5 静态内容 30
2.2 struts.xml配置详解 30
2.2.1 Bean配置 31
2.2.2 常量配置 32
2.2.3 包配置 33
2.2.4 命名空间配置 34
2.2.5 包含配置 35
2.2.6 拦截器配置 36
2.3 配置Action 37
2.3.1 实现Action类 37
2.3.2 Action间接访问Servlet API 39
2.3.3 Action直接访问Servlet API 41
2.3.4 配置Action 43
2.3.5 动态方法调用 43
2.3.6 为Action元素指定method属性 45
2.3.7 使用通配符映射 46
2.3.8 默认Action 46
2.4 配置Result 47
2.4.1 结果映射 47
2.4.2 结果类型 48
2.4.3 dispatcher结果类型 49
2.4.4 redirect结果类型 50
2.4.5 redirectAction结果类型 51
2.4.6 chain结果类型 51
2.4.7 plainText结果类型 52
2.4.8 通配符动态配置Result 52
2.4.9 OGNL动态配置Result 52
2.5 使用注解配置Action 53
2.5.1 与Action配置相关的注解 53
2.5.2 使用注解配置Action的注意事项 54
2.6 项目案例:实现用户的注册功能 55
2.7 习题 57
2.8 实践疑难解答 58
2.8.1 通配符的使用效率 58
2.8.2 配置struts.xml文件时,class路径错误 59
第3章 Struts 2的拦截器 60
3.1 拦截器简介 60
3.2 Struts 2拦截器 61
3.2.1 配置拦截器 61
3.2.2 使用拦截器 64
3.2.3 默认拦截器 64
3.3 自定义拦截器 66
3.3.1 自定义拦截器类 66
3.3.2 使用自定义拦截器 67
3.4 深入拦截器 70
3.4.1 方法过滤 70
3.4.2 拦截器的执行顺序 74
3.4.3 拦截结果监听器 75
3.4.4 覆盖拦截器栈中拦截器参数 76
3.5 Struts 2框架的系统拦截器 78
3.5.1 系统拦截器 78
3.5.2 timer拦截器实例 81
3.6 项目案例:实现文字过滤功能 82
3.7 习题 85
3.8 实践疑难解答 87
3.8.1 为什么要用拦截器的问题 87
3.8.2 设置默认拦截器的问题 87
3.8.3 Action方法的执行和拦截器关系的问题 88
3.8.4 拦截器的错误信息如何显示在页面上 88
第4章 类型转换 90
4.1 传统的类型转换 90
4.2 类型转换器 91
4.2.1 类型转换器介绍 91
4.2.2 编写类型转换器 91
4.3 自定义类型转换器 93
4.3.1 基于OGNL的类型转换器 93
4.3.2 基于Struts 2的类型转换器 94
4.3.3 注册自定义类型转换器 95
4.3.4 数组属性类型转换器 96
4.3.5 集合属性类型转换器 97
4.4 使用Struts 2的类型转换 99
4.4.1 Struts 2系统内建的类型转换器 99
4.4.2 null属性的处理 99
4.4.3 使用OGNL表达式 100
4.4.4 使用集合类型属性 101
4.4.5 使用Set类型属性 103
4.5 类型转换中的异常处理 104
4.5.1 类型转换异常拦截器 104
4.5.2 改进类型转换异常显示信息 105
4.5.3 处理复合类型转换异常 105
4.6 项目案例:使用List属性同时处理多条注册数据 106
4.7 习题 108
4.8 实践疑难解答 110
4.8.1 Struts 2 Date类型转换问题 110
4.8.2 Struts 2的自动类型转换出错 111
第5章 Struts 2的输入校验 113
5.1 输入校验概述 113
5.1.1 输入校验的必要性 113
5.1.2 客户端和服务器端校验 114
5.2 使用validate进行输入校验 116
5.2.1 validate()方法输入校验 116
5.2.2 validateXxx()方法输入校验 117
5.2.3 Struts 2的输入校验流程 119
5.3 基本输入校验 120
5.3.1 定义校验规则 120
5.3.2 校验器配置风格 123
5.3.3 输入校验的国际化信息 124
5.3.4 校验的搜索顺序 127
5.4 Struts 2框架的校验器 128
5.4.1 必填校验器 128
5.4.2 必填字符串校验器 129
5.4.3 字符串长度校验器 130
5.4.4 整数校验器 131
5.4.5 日期校验器 133
5.4.6 转换校验器 134
5.4.7 邮件地址校验器 135
5.4.8 网址校验器 135
5.4.9 表达式校验器 135
5.4.10 字段表达式校验器 136
5.4.11 正则表达式校验器 137
5.4.12 visitor校验器 137
5.5 自定义校验器 138
5.6 项目案例:学生信息录入 140
5.7 习题 143
5.8 实践疑难解答 144
5.8.1 使用转换校验器抛出异常 144
5.8.2 Struts 2如何显示验证出错信息 144
5.8.3 Struts 2中校验方法的使用 145
第6章 Struts 2国际化与异常处理 146
6.1 Java国际化 146
6.1.1 Java对国际化的支持 146
6.1.2 Java支持的语言和区域 148
6.1.3 使用资源文件 149
6.1.4 使用类文件代替资源文件 150
6.1.5 MessageFormat类 151
6.2 Struts 2国际化 151
6.2.1 Struts 2对国际化的支持 152
6.2.2 使用占位符 155
6.2.3 包范围资源文件 157
6.2.4 Action范围资源文件 159
6.2.5 临时资源文件 159
6.2.6 加载资源文件的顺序 160
6.3 动态访问国际化资源文件 161
6.4 Struts 2异常处理 164
6.4.1 传统异常处理方式 164
6.4.2 Struts 2异常处理机制 165
6.4.3 配置异常处理 166
6.4.4 异常处理实例 166
6.5 项目案例:实现注册系统的国际化功能 168
6.6 习题 172
6.7 实践疑难解答 174
6.7.1 Struts 2国际化中文乱码解决问题 174
6.7.2 使用Struts 2国际化标签的错误问题 175
第7章 OGNL 177
7.1 OGNL基础 177
7.1.1 OGNL三要素 177
7.1.2 OGNL表达式 178
7.1.3 对集合的操作 180
7.2 lambda表达式 184
7.3 Struts 2的OGNL 187
7.4 项目案例:获取员工信息 191
7.5 习题 193
7.6 实践疑难解答 194
7.6.1 OGNL表达式问题 194
7.6.2 Struts 2的OGNL调用Action中的方法 194
7.6.3 #、%、$在页面表达式的区别 195
第8章 Struts 2标签库 196
8.1 Struts 2的标签库概述 196
8.1.1 标签库简介 196
8.1.2 Struts 2的标签分类 197
8.2 控制标签 198
8.2.1 if/elseif/else标签 198
8.2.2 iterator标签 198
8.2.3 append标签 199
8.2.4 generator标签 200
8.2.5 merge标签 201
8.2.6 subset标签 202
8.2.7 sort标签 203
8.3 数据标签 204
8.3.1 action标签 204
8.3.2 bean标签 206
8.3.3 date标签 207
8.3.4 debug标签 207
8.3.5 include标签 208
8.3.6 param标签 208
8.3.7 push标签 209
8.3.8 set标签 209
8.3.9 url标签 210
8.3.10 property标签 211
8.4 主题与模板 212
8.4.1 主题 212
8.4.2 模板 213
8.4.3 使用主题模板 213
8.5 表单标签 214
8.5.1 表单标签通用属性 214
8.5.2 checkboxlist标签 214
8.5.3 combobox标签 216
8.5.4 doubleselect标签 216
8.5.5 datetimepicker标签 217
8.5.6 head标签 218
8.5.7 file标签 219
8.5.8 hidden标签 219
8.5.9 select标签 220
8.5.10 radio标签 220
8.5.11 optgroup标签 221
8.5.12 textfield、password和textarea标签 222
8.5.13 token标签 222
8.5.14 updownselect标签 223
8.5.15 optiontransferselect标签 224
8.6 非表单标签 225
8.6.1 actionerror和actionmessage标签 225
8.6.2 component标签 226
8.6.3 tree和treenode标签 227
8.7 项目案例:编写一个用户注册页面 228
8.8 习题 229
8.9 实践疑难解答 231
8.9.1 表单标签hidden的使用问题 231
8.9.2 Struts 2〈s:iterator〉标签问题 231
第9章 Struts 2数据库应用 232
9.1 访问MySQL数据库 232
9.1.1 创建一个数据库 232
9.1.2 建立JDBC连接 233
9.2 使用Tomcat数据源 234
9.3 Struts 2数据分页 237
9.4 项目案例:商品的增删改查 242
9.4.1 通用模块的实现 242
9.4.2 添加商品 244
9.4.3 修改商品 246
9.4.4 删除商品 248
9.5 习题 250
9.6 实践疑难解答 251
9.6.1 MySQL自增列的设置问题 251
9.6.2 MySQL代码中关键字的大小写问题 251
9.6.3 MySQL中limit的用法 252
第10章 文件上传与下载 253
10.1 文件上传 253
10.1.1 基于表单的文件上传 253
10.1.2 手动上传 255
10.1.3 Struts 2对文件上传的支持 256
10.1.4 在Struts 2中实现文件上传 257
10.1.5 实现上传文件过滤 259
10.2 多个文件同时上传 262
10.2.1 使用数组同时上传多个文件 262
10.2.2 使用List同时上传多个文件 263
10.3 文件下载 265
10.3.1 使用Struts 2控制文件下载 265
10.3.2 下载权限控制 266
10.4 项目案例:实现多个文件的上传功能 267
10.5 习题 269
10.6 实践疑难解答 271
10.6.1 Struts 2文件上传类型问题 271
10.6.2 Struts 2判断上传文件大小问题 271
第11章 避免表单重复提交与等待页面 272
11.1 表单重复提交原因 272
11.2 Struts 2实现方式 272
11.2.1 使用token标签 273
11.2.2 使用tokenSession拦截器 275
11.3 显示等待页面 277
11.4 项目案例:编写简单的登录系统 279
11.5 习题 282
11.6 实践疑难解答 284
11.6.1 token标签的问题 284
11.6.2 tokenSession拦截器的问题 285
11.6.3 显示等待页面错误 285
第12章 整合Spring 287
12.1 Spring概述 287
12.1.1 Spring的起源及优点 287
12.1.2 Spring的核心 288
12.1.3 下载安装Spring 288
12.1.4 使用Spring的IoC容器 288
12.2 Struts 2整合Spring 290
12.2.1 整合原理 290
12.2.2 整合步骤 291
12.2.3 Struts 2整合Spring示例 291
12.3 项目案例:编写简单的登录验证系统 294
12.4 习题 296
12.5 实践疑难解答 297
12.5.1 访问Action时请求参数为null 297
12.5.2 Struts 2整合Spring概念不清楚 298
第13章 整合Hibernate 299
13.1 Hibernate简介 299
13.1.1 Hibernate的优缺点 299
13.1.2 Hibernate API简介 300
13.1.3 Hibernate核心接口 300
13.2 Struts 2整合Hibernate 301
13.2.1 下载安装Hibernate 301
13.2.2 Struts 2与Hibernate的整合方案 302
13.2.3 功能设计与数据库设计 303
13.2.4 Hibernate映射对象到数据库 303
13.2.5 hibernate.cfg.xml配置文件 304
13.2.6 构建SessionFactory 305
13.2.7 数据库操作DAO 306
13.2.8 业务控制Action 308
13.2.9 struts.xml配置文件 309
13.2.10 视图文件 310
13.3 习题 316
13.4 实践疑难解答 318
13.4.1 使用Hibernate更改指定属性 318
13.4.2 Hibernate中常用的主键生成策略有哪几种 319
13.4.3 Hibernate调用createQuery()方法的值的类型问题 320
第14章 整合其他框架技术 321
14.1 整合JSF 321
14.1.1 整合原理 321
14.1.2 整合步骤 322
14.1.3 整合实例 323
14.2 整合SiteMesh 327
14.2.1 SiteMesh简介 327
14.2.2 下载安装SiteMesh 328
14.2.3 SiteMesh的简单应用 328
14.2.4 更复杂的装饰器页面 330
14.2.5 Struts 2中使用SiteMesh 334
14.3 整合FreeMarker 339
14.3.1 FreeMarker简介 339
14.3.2 FreeMarker的简单应用 340
14.3.3 FreeMarker常用指令 341
14.3.4 Struts 2中使用FreeMarker 344
14.4 整合Tiles 348
14.4.1 Tiles简介 348
14.4.2 下载安装Tiles 349
14.4.3 Tiles的简单应用 349
14.4.4 Struts 2中使用Tiles 352
14.5 整合JFreeChart 356
14.5.1 JFreeChart简介 356
14.5.2 下载安装JFreeChart 356
14.5.3 JFreeChart的简单应用 357
14.5.4 Struts 2中使用JFreeChart 358
14.6 项目案例:开发在线投票系统 360
14.7 习题 363
14.8 实践疑难解答 364
14.8.1 JSF的配置问题 364
14.8.2 JAR文件的版本问题 365
第15章 人事管理系统 366
15.1 系统概述 366
15.1.1 需求分析 366
15.1.2 系统用例图 367
15.1.3 系统设计 367
15.2 数据库设计 368
15.3 搭建Struts 2+Spring+Hibernate开发环境 370
15.4 系统实现 376
15.4.1 通用模块的实现 376
15.4.2 部门管理 378
15.4.3 员工管理 384
15.4.4 招聘管理 391