第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框架 6
1.2 Struts 1的缺陷与现状 8
1.2.1 支持的表现层技术单一 8
1.2.2 与Servlet API严重耦合 8
1.2.3 代码依赖于Struts 1 API 9
1.3 Struts 2的优势与体系 9
1.3.1 Struts 2的优势 9
1.3.2 Struts 2架构 11
1.3.3 Struts 2的配置文件 11
1.3.4 Strut 2的标签库 12
1.3.5 Struts 2的控制器组件 13
1.4 本章小结 14
第2章 Struts 2的HelloWorld 15
2.1 下载和安装Struts 2框架 16
2.2 从用户请求开始 17
2.3 创建Struts 2的Web应用 19
2.3.1 创建Web应用 19
2.3.2 增加Struts 2功能 20
2.4 实现控制器 21
2.4.1 实现控制器类 21
2.4.2 配置Action 22
2.4.3 增加视图资源完成应用 23
2.5 改进控制器 24
2.5.1 实现Action接口 24
2.5.2 跟踪用户状态 25
2.5.3 添加处理信息 26
2.5.4 输出处理信息 28
2.6 改进视图组件 29
2.6.1 保护JSP页面 30
2.6.2 改善输出页面 30
2.6.3 使用UI标签简化表单页面 31
2.7 完成程序国际化 32
2.7.1 定义国际化资源文件 33
2.7.2 加载资源文件 34
2.7.3 输出国际化信息 35
2.8 增加数据校验 36
2.8.1 继承ActionSupport 37
2.8.2 使用Struts 2的校验框架 39
2.9 本章小结 40
第3章 Struts 2核心技术 41
3.1 在Eclipse中开发Struts 2 42
3.1.1 创建Web应用 42
3.1.2 增加Struts 2支持 44
3.1.3 部署Struts 2应用 45
3.1.4 增加应用的Action 46
3.2 Struts 2的基本流程 47
3.2.1 核心控制器
StrutsPrepareAndExecuteFilter 47
3.2.2 业务控制器 48
3.2.3 Struts 2的模型组件 48
3.2.4 Struts 2的视图组件 49
3.2.5 Struts 2的运行流程 49
3.3 Struts 2的基本配置 50
3.3.1 配置web.xml文件 50
3.3.2 struts.xml配置文件 51
3.3.3 struts.properties文件与常量配置 54
3.3.4 struts.xml文件结构 59
3.4 深入Struts 2配置文件 61
3.4.1 Bean配置 61
3.4.2 常量配置 62
3.4.3 包配置 62
3.4.4 命名空间配置 64
3.4.5 包含配置 66
3.4.6 拦截器配置 66
3.5 Struts 2的Action 67
3.5.1 实现Action处理类 67
3.5.2 Action访问Servlet API 71
3.5.3 Action直接访问Servlet API 74
3.5.4 配置Action 76
3.5.5 配置Action的默认处理类 78
3.5.6 动态方法调用 78
3.5.7 为action元素指定method属性 81
3.5.8 使用通配符 82
3.5.9 配置默认的Action 87
3.6 管理处理结果 87
3.6.1 处理结果的改进 88
3.6.2 配置结果 88
3.6.3 Struts 2支持的处理结果类型 89
3.6.4 chain结果类型 91
3.6.5 plainText结果类型 93
3.6.6 redirect结果类型 95
3.6.7 redirectAction结果类型 96
3.6.8 动态结果 97
3.6.9 请求参数决定结果 98
3.6.10 全局结果 100
3.7 属性驱动和模型驱动 101
3.7.1 模型的作用 101
3.7.2 使用模型驱动 103
3.8 Struts 2的异常机制 105
3.8.1 Struts 2的异常处理哲学 105
3.8.2 声明式异常捕捉 107
3.8.3 输出异常信息 110
3.9 未知处理器 111
3.10 本章小结 113
第4章 Struts 2的类型转换 114
4.1 类型转换的意义 115
4.1.1 表现层数据处理 115
4.1.2 传统的类型转换 116
4.2 Struts 2内建的类型转换器 118
4.3 基于OGNL的类型转换 120
4.3.1 使用OGNL转换成Map集合 121
4.3.2 使用OGNL转换成List集合 122
4.4 自定义类型转换器 123
4.4.1 系统需求 123
4.4.2 实现类型转换器 125
4.4.3 局部类型转换器 127
4.4.4 全局类型转换器 128
4.4.5 局部类型转换器和全局类型
转换器的说明 130
4.4.6 基于Struts 2的类型转换器 130
4.4.7 数组属性的类型转换器 132
4.4.8 集合属性的类型转换器 135
4.5 集合类型转换的高级特性 137
4.5.1 指定集合元素的类型 137
4.5.2 为Set集合的元素指定索引属性 138
4.6 类型转换中的错误处理 140
4.6.1 类型转换的错误处理流程 140
4.6.2 处理类型转换错误 142
4.6.3 输出类型转换错误 142
4.6.4 处理集合属性的转换错误 145
4.7 本章小结 147
第5章 Struts 2的输入校验 148
5.1 输入校验概述 149
5.1.1 为什么需要输入校验 149
5.1.2 客户端校验 150
5.1.3 服务器端校验 152
5.1.4 类型转换和输入校验 155
5.2 基本输入校验 156
5.2.1 编写校验规则文件 156
5.2.2 国际化提示信息 159
5.2.3 使用客户端校验 161
5.3 校验器的配置风格 164
5.3.1 字段校验器配置风格 164
5.3.2 非字段校验器配置风格 165
5.3.3 短路校验器 166
5.3.4 校验顺序和短路 167
5.4 校验文件的搜索规则 168
5.5 内建校验器 170
5.5.1 注册校验器 170
5.5.2 必填校验器 172
5.5.3 必填字符串校验器 172
5.5.4 整数校验器 173
5.5.5 日期校验器 174
5.5.6 表达式校验器 175
5.5.7 字段表达式校验器 175
5.5.8 邮件地址校验器 176
5.5.9 网址校验器 176
5.5.10 Visitor校验器 177
5.5.11 转换校验器 180
5.5.12 字符串长度校验器 181
5.5.13 正则表达式校验器 181
5.6 基于Annotation的输入校验 182
5.7 手动完成输入校验 184
5.7.1 重写validate方法 184
5.7.2 重写validateXxx方法 185
5.7.3 Struts 2的输入校验流程 186
5.8 本章小结 188
第6章 上传和下载文件 189
6.1 文件上传的原理 190
6.1.1 表单元素的enctype属性 190
6.1.2 手动上传 193
6.1.3 使用Servlet 3.0 API完成上传 194
6.2 Struts 2的文件上传 197
6.2.1 Struts 2的文件上传支持 197
6.2.2 实现文件上传的Action 197
6.2.3 配置文件上传的Action 200
6.2.4 手动实现文件过滤 201
6.2.5 拦截器实现文件过滤 203
6.2.6 输出错误提示 205
6.2.7 文件上传的常量配置 206
6.3 使用Pell上传 206
6.4 同时上传多个文件 207
6.4.1 使用数组同时上传多个文件 208
6.4.2 使用List同时上传多个文件 210
6.5 使用Struts 2控制文件下载 212
6.5.1 实现文件下载的Action 212
6.5.2 配置Action 214
6.5.3 下载前的授权控制 214
6.6 本章小结 216
第