第一部分 知识准备篇 3
第1章 厉兵秣马——开发环境准备 3
1.1准备源代码阅读环境 3
1.1.1安装与配置JDK 3
1.1.2安装Eclipse与源码调试 5
1.1.3安装与配置Web服务器 7
1.1.4在Eclipse中使用Jetty搭建Web开发环境 8
1.2获取Struts2 12
1.2.1 Struts2的相关资源下载 12
1.2.2 Struts2项目的目录组织结构 13
1.3 Struts2源码的初步研究 14
1.3.1源码的组织形式 14
1.3.2调试Struts2源码 15
1.4小结 18
第2章 固本清源——Web开发浅谈 20
2.1面向对象浅谈 20
2.1.1对象构成模型 21
2.1.2对象关系模型 25
2.1.3面向对象编程的基本观点 28
2.2框架的本质 30
2.3最佳实践 34
2.4 Web开发的基本模式 36
2.4.1分层开发模式 36
2.4.2 MVC模式 38
2.5表示层的困惑 40
2.6如何学习开源框架 45
2.7小结 49
第3章 提纲挈领——Struts2概览 50
3.1 Struts2的来世今生 50
3.2 Struts2面面观 51
3.2.1 Struts2的运行环境 52
3.2.2 Struts2的应用场景 53
3.2.3 Struts2的核心技术 54
3.3多视角透析Struts2 56
3.3.1透视镜——Struts2的宏观视图 56
3.3.2显微镜——Struts2的微观元素 60
3.4 Struts2的配置元素 64
3.4.1 Struts2配置详解 65
3.4.2 Struts2配置元素定义 67
3.4.3 Struts2配置元素的分类 71
3.5小结 72
第二部分 核心技术篇 75
第4章 源头活水——Struts2中的设计模式 75
4.1 ThreadLocal模式 75
4.1.1线程安全问题的由来 75
4.1.2 ThreadLocal模式的实现机理 78
4.1.3 ThreadLocal模式的应用场景 81
4.1.4 ThreadLocal模式的核心元素 82
4.2装饰(Decorator)模式 85
4.2.1装饰模式的定义 85
4.2.2装饰模式的构成要素 86
4.2.3装饰模式的应用案例 87
4.3策略(Strategry)模式 90
4.3.1策略模式的定义 90
4.3.2策略模式的应用场景 91
4.3.3策略模式的深入思考 93
4.4构造(Builder)模式 95
4.4.1构造模式的核心要素 95
4.4.2构造模式的应用场景 97
4.4.3对象构造步骤 100
4.5责任链(Chain Of Responsibility)模式 101
4.5.1责任链模式的定义 101
4.5.2责任链模式的逻辑意义 102
4.6小结 103
第5章 生命之源——XWork中的容器 105
5.1容器,对象生命周期管理的基石 105
5.1.1对象的生命周期管理 105
5.1.2容器(Container)的引入 106
5.1.3容器(Container),不是容器(Collection) 107
5.2 XWork容器概览 108
5.2.1 XWork容器的定义 108
5.2.2 XWork容器的管辖范围 111
5.2.3 XWork容器操作详解 113
5.3深入浅出XWork容器 117
5.3.1 XWork容器的存储结构 117
5.3.2 XWork容器的实现机理 124
5.4统一的容器操作接口——ObjectFactory 129
5.5小结 135
第6章 灵丹妙药——OGNL,数据流转的催化剂 136
6.1架起数据沟通的桥梁——表达式引擎 136
6.1.1数据流转的困境 136
6.1.2数据访问的困境 138
6.1.3表达式引擎 138
6.2强大的OGNL 140
6.2.1深入OGNL的API 140
6.2.2 OGNL三要素 142
6.2.3 OGNL的基本操作 143
6.2.4深入this指针 146
6.2.5有关#符号的三种用途 147
6.3深入OGNL内部 147
6.3.1深入OgnlContext 147
6.3.2深入OGNL的计算规则 150
6.3.3深入OGNL的扩展方式 164
6.4小结 173
第7章 别具匠心——XWork设计原理 175
7.1请求-响应的哲学 175
7.1.1请求-响应的基本概念 175
7.1.2请求-响应的实现模式 177
7.1.3分歧和职责 181
7.2数据流和控制流 184
7.2.1再谈MVC 184
7.2.2数据载体的战争 186
7.2.3控制流的细节 191
7.3 XWork概览 193
7.3.1 XWork的宏观视图 193
7.3.2 XWork的微观视图 195
7.4小结 199
第8章 庖丁解牛——XWork元素详解 200
8.1深入XWork宏观视图 200
8.1.1数据流体系 200
8.1.2控制流体系 203
8.2数据流体系——相互依存 205
8.2.1 ActionContext——一个平行世界 205
8.2.2 ValueStack——对OGNL的扩展 216
8.2.3深入ValueStack的实现 225
8.2.4形影不离、相互依存的Actioncontext与ValueStack 231
8.3控制流体系——有条不紊 233
8.3.1 Action——革命性突破 233
8.3.2 Interceptor——腾飞的翅膀 238
8.3.3 ActionInvocation——核心调度 247
8.3.4 ActionProxy——执行窗口 254
8.4交互体系——水乳交融 258
8.4.1数据环境的生命周期 259
8.4.2三军会师之地 260
8.4.3 Action交互体系 261
8.5小结 268
第三部分 运行主线篇 273
第9章 包罗万象——Struts2初始化主线 273
9.1配置元素与初始化主线 273
9.1.1从入口程序开始 273
9.1.2初始化主线的核心驱动力 276
9.1.3初始化主线的构成元素 277
9.2核心分发器——Dispatcher 278
9.2.1核心分发器的核心驱动作用 278
9.2.2核心分发器的数据结构 280
9.3配置元素的加载器(Provider) 282
9.3.1配置元素加载器的作用 282
9.3.2容器加载器——ContainerProvider 283
9.3.3事件映射加载器——PackageProvider 285
9.4配置元素的构造器(Builder) 288
9.4.1容器构造器——ContainerBuilder 289
9.4.2事件映射构造器——PackageConfig.Builder 290
9.5配置元素的管理类 295
9.5.1配置管理元素——Configuration 296
9.5.2配置操作接口——ConfigurationManager 299
9.6 Struts2初始化主线详解 300
9.6.1核心分发器的初始化 301
9.6.2容器的初始化 306
9.7小结 313
第10章 井然有序——与Http请求的战斗 314
10.1制定作战计划 314
10.1.1战斗资源 314
10.1.2战斗进程 315
10.2第一战场——Http请求的预处理阶段 317
10.2.1三探入口程序 317
10.2.2 Http请求预处理类——PrepareOperations 320
10.2.3 Http请求的执行类——ExecuteOperations 326
10.3第二战场——XWork处理阶段 330
10.3.1执行控制权的移交 330
10.3.2 ActionInvocation调度的再分析 334
10.4小结 338
第11章 展翅高飞——让视图放开手脚 339
11.1视图(View)概述 339
11.1.1视图表现技术 339
11.1.2视图的本质 343
11.1.3视图的职责 344
11.2深入Result机制 345
11.2.1 Result的不同视角 345
11.2.2 Result职责分析 348
11.3标签库,永恒的争论话题 349
11.3.1标签库产生的初衷 350
11.3.2标签库,毒药还是解药 350
11.3.3标签库的发展趋势 352
11.3.4标签的分类 353
11.4数据访问的哲学 354
11.4.1不要问我从哪里来 354
11.4.2不要问我长什么样 358
11.5小结 359
第12章 三头六臂——Struts2的扩展机制 360
12.1程序扩展机制的深入思考 360
12.1.1插件模式的基本概念 360
12.1.2常见的插件模式 362
12.1.3插件模式的利弊分析 364
12.2 Struts2的插件模式 366
12.2.1深入Struts2插件 366
12.2.2 Struts2插件分类 369
12.2.3 Struts2的插件加载机制 372
12.3小结 379
后记 380