第1章 可扩展和高性能Web应用 1
1.1 Web应用的出现 1
1.1.1 基本定义 1
1.1.2 Web的本质特性及其挑战 3
1.2 性能和可扩展性 4
1.2.1 性能 4
1.2.2 可扩展性 6
1.3 Internet媒体 6
1.3.1 更广泛的受众群体 7
1.3.2 交互性 7
1.3.3 动态性 8
1.3.4 总呈“开放”状态 8
1.3.5 集成性 9
1.3.6 缺乏完全控制 9
1.4 测量性能和可扩展性 10
1.4.1 测量性能 10
1.4.2 测量可扩展性 12
1.4.3 吞吐量和价格/性能比 15
1.5 可扩展性和性能提示 16
1.5.1 考虑端到端 16
1.5.2 可扩展性不等于性能 16
1.5.3 通过比较测量可扩展性 16
1.6 小结 17
第2章 Web应用体系结构 18
2.1 Web应用术语 18
2.2 应用需求 19
2.2.1 业务逻辑 19
2.2.2 数据管理 20
2.2.3 接口 20
2.3 Web需求 21
2.4 抽象Web应用体系结构 22
2.4.1 从客户到服务器:瘦客户和胖客户 22
2.4.2 持久性数据管理 24
2.5 N层应用体系结构 24
2.5.1 客户 24
2.5.2 网络 25
2.5.3 服务器 28
2.5.4 基于层的设计 29
2.5.5 多线程的应用服务器 31
2.5.6 有效中间件带来的问题 32
2.6 可扩展性和性能提示 33
2.6.1 不要对瘦客户期望过高 33
2.6.2 使用或建立多线程应用服务器 34
2.6.3 确定合适的粒度 35
2.7 小结 35
第3章 J2EE规范 37
3.1 规范概述 37
3.2 部署问题 40
3.2.1 包装 40
3.2.2 部署描述符文件 41
3.3 平台技术与服务 43
3.3.1 通过RMI-IIOP实现组件通信 43
3.3.2 使用Java事务API实现事务管理 45
3.3.3 实现资源查找的JNDI 46
3.4 J2EE和体系结构 48
3.5 小结 49
第4章 可扩展性和性能技术 50
4.1 缓存与复制 50
4.2 并行 55
4.3 冗余 58
4.4 异步 59
4.5 资源池 61
4.6 小结 67
第5章 HTTP客户/服务器通信 69
5.1 HTTP协议 69
5.2 部署模式 71
5.2.1 带有浏览器客户的应用 71
5.2.2 不带浏览器的应用 71
5.3 HTTP效率 72
5.4 HTTP详细内容 73
5.4.1 语义 73
5.4.2 HTTP请求 75
5.4.3 GET方法 75
5.4.4 POST方法 79
5.4.5 HTTP1.1缓存 80
5.4.6 连接管理 83
5.5 可扩展性和性能提示 85
5.5.1 理智地使用GET和POST 85
5.5.2 对于非浏览器客户考虑HTTP 85
5.5.3 提升HTTP响应缓存 85
5.5.4 支持持续连接 87
5.6 小结 87
第6章 请求处理 88
6.1 一般问题 89
6.2 特定问题 89
6.2.1 连接管理 91
6.2.2 数据编组 91
6.2.3 请求服务 92
6.2.4 缓存环境中的数据本地性 94
6.3 请求处理模式 94
6.3.1 同步通信 95
6.3.2 异步通信 95
6.3.3 可扩展性和性能问题 98
6.4 请求处理和J2EE 99
6.4.1 Web服务 99
6.4.2 利用Java servlet和JSP实现同步处理 100
6.4.3 使用Java消息服务实现异步处理 100
6.5 可扩展性和性能提示 101
6.5.1 建立异步解决方案 101
6.5.2 线程间的流数据 102
6.5.3 开发有效的远程接口 107
6.6 小结 110
第7章 基于Java servlet的会话管理 111
7.1 生成动态响应 111
7.1.1 公共网关接口 111
7.1.2 通过API扩展Web服务器 112
7.1.3 重定向Web服务器请求 112
7.2 使用serlet 113
7.2.1 servlet和servlet容器 113
7.2.2 与servlet交互 114
7.2.3 Web服务器与servlet容器集成 116
7.3 开发servlet 117
7.3.1 设计servlet接口 117
7.3.2 建立servlet的代码 118
7.4 servlet执行 121
7.4.1 servlet容器 121
7.4.2 servlet和多线程 122
7.5 servlet和会话管理 125
7.6 部署servlet 130
7.7 使用JSP开发servlet 132
7.7.1 JSP页面示例 132
7.7.2 JSP页面的结构 133
7.7.3 JSP如何工作 135
7.7.4 JSP指示 138
7.7.5 JSP到底是什么 139
7.8 可扩展性和性能提示 139
7.8.1 使用细粒度的串行化 139
7.8.2 使用基于硬件的负载平衡 140
7.8.3 使用servlet实现会话管理,而非业务逻辑 140
7.8.4 再三考虑JSP 141
7.9 小结 141
第8章 利用企业JavaBean构建应用服务器 143
8.1 应用服务器的需求 143
8.2 企业级JavaBean:J2EE解决方案 144
8.3 EJB的工作原理 145
8.4 EJB类型 146
8.5 应用示例 147
8.6 EJB设计 148
8.6.1 会话bean 148
8.6.2 实体bean 148
8.6.3 消息驱动bean 153
8.7 EJB实现 153
8.7.1 会话bean 153
8.7.2 实体bean 160
8.7.3 实体bean和EJB2.0 161
8.7.4 消息驱动bean 172
8.8 客户/EJB集成 175
8.9 可扩展性和性能提示 179
8.9.1 尽量用消息驱动bean而不是会话bean 179
8.9.2 使用无状态会话bean 180
8.9.3 尽量采用粗粒度的EJB方法 181
8.9.4 要么很好地使用BMP,要么干脆不用 183
8.9.5 了解您的开发商 184
8.10 小结 184
第9章 基于消息实现高效的企业应用集成 186
9.1 B2B的工作实例 186
9.2 Java消息服务 187
9.3 JMS概念 187
9.3.1 提供者 188
9.3.2 客户 188
9.3.3 消息 188
9.3.4 管理对象 190
9.4 JMS编程模型 190
9.4.1 特定于模型的管理对象接口 191
9.4.2 消息使用的同步性 191
9.5 JMS可靠性与性能 192
9.5.1 客户确认 192
9.5.2 消息持久保存 193
9.5.3 时间依赖性和JMS发布模型 193
9.6 一个JMSpub/sub应用示例 194
9.6.1 开发消息发布者 194
9.6.2 开发消息预约者 196
9.6.3 关于部署 199
9.7 可扩展性和性能提示 199
9.7.1 使用消息 199
9.7.2 理解JMS效率-可靠性的折衷 202
9.8 小结 202
第10章 高效的数据库设计 204
10.1 数据库技术和关系模型 205
10.2 逻辑数据库设计 206
10.3 物理数据库设计 207
10.3.1 表和行 208
10.3.2 约束 209
10.4 查询数据库 209
10.4.1 查询数据 209
10.4.2 嵌套查询 211
10.4.3 连接查询 211
10.5 其他重要的数据库对象 213
10.5.1 视图 213
10.5.2 存储过程 214
10.5.3 触发器 216
10.5.4 索引 217
10.5.5 序列 218
10.5.6 其他对象 219
10.6 查询处理 219
10.7 可扩展性和性能提示 222
10.7.1 理解如何使用数据库 222
10.7.2 理解何时使用数据库 223
10.7.3 理解如何访问数据 224
10.7.4 规范数据模型 225
10.7.5 有选择地实现模型的非规范化 229
10.7.6 使用存储过程 231
10.7.7 避免触发器及其他隐式执行 234
10.7.8 了解开发商 234
10.8 小结 235
第11章 使用JDBC和SQL高效查询数据库 236
11.1 使用JDBC的原因 236
11.2 JDBC概念和对象 236
11.2.1 相关JDBC对象及其关系 237
11.2.2 连接数据库 238
11.3 编写JDBC查询 238
11.3.1 处理语句 238
11.3.2 循环处理结果 239
11.3.3 执行单个更新 242
11.3.4 其他类型的更新:创建表和存储过程 242
11.4 更高级的问题 243
11.4.1 准备语句(prepared statement) 243
11.4.2 动态SQL 244
11.4.3 事务管理 245
11.4.4 双向结果循环 247
11.4.5 可更新结果 248
11.4.6 执行批更新 248
11.5 可扩展性和性能提示 249
11.5.1 在可能的情况下使用PreparedStatement 249
11.5.2 对一个远程数据库使用批更新 251
11.5.3 不要过分使用提交 252
11.5.4 使用多线程实现并行查询 253
11.6 小结 253
第12章 Web服务:Web应用的未来 254
12.1 Web服务的实际使用 255
12.2 Web服务到底是什么 255
12.3 Web服务技术 257
12.3.1 概述 257
12.3.2 综合 258
12.4 XML:自描述数据 259
12.4.1 DTD和模式语言 260
12.4.2 解析XML 261
12.4.3 与XML相关的技术 266
12.5 开发Web服务 266
12.6 使用WSDL描述Web服务 267
12.6.1 定义 267
12.6.2 示例 268
12.7 使用SOAP调用Web服务 270
12.7.1 SOAP如何工作 270
12.7.2 使用HTTP上的SOAP 271
12.8 利用UDDI注册Web服务 273
12.8.1 标准 274
12.8.2 UDDIAPI 274
12.9 重览全局 276
12.9.1 提供者角度 276
12.9.2 使用者角度 277
12.10 可扩展性和性能问题 277
12.10.1 远程方法的复制与负载平衡 277
12.10.2 XML解析性能 277
12.10.3 解析与查询XML 278
12.11 小结 280