第1章 概述 1
1.1 Java EE应用模型 1
1.2 分布式多层应用 2
1.2.1 安全性 2
1.2.2 Java EE组件 3
1.2.3 Java EE客户端 3
1.2.4 Web组件 4
1.2.5 业务组件 5
1.2.6 企业信息系统层 5
1.3 Java EE容器 6
1.3.1 容器服务 6
1.3.2 容器类型 6
1.4 Web服务支持 7
1.4.1 XML 7
1.4.2 SOAP传输协议 8
1.4.3 WSDL标准格式 8
1.4.4 UDDI和ebXML标准格式 8
1.5 Java EE应用组装和部署 8
1.6 打包应用 9
1.7 制定角色 10
1.7.1 Java EE产品供应者 10
1.7.2 工具供应者 10
1.7.3 应用组件供应者 10
1.7.4 应用组装者 11
1.7.5 应用部署者和管理员 11
1.8 Java EE 5 API 11
1.8.1 企业JavaBeans技术 11
1.8.2 Java servlet技术 12
1.8.3 JavaServer页面技术 12
1.8.4 JavaServer页面标准标签库 12
1.8.5 JavaServer Faces 13
1.8.6 Java消息服务API 13
1.8.7 Java事务API 13
1.8.8 JavaMail API 13
1.8.9 JavaBeans激活框架 13
1.8.10 针对XML处理的Java API 14
1.8.11 针对XML Web服务的Java API(JAX-WS) 14
1.8.12 针对XML绑定的Java体系结构(JAXB) 14
1.8.13 带附件API的Java SOAP 14
1.8.14 针对XML注册表的JavaAPI 14
1.8.15 J2EE连接器体系结构 15
1.8.16 Java数据库连接API 15
1.8.17 Java持久化API 15
1.8.18 Java命名和目录接口 15
1.8.19 Java验证和授权服务 16
1.8.20 简化的系统集成 16
1.9 Sun Java系统应用服务器平台第9版 16
1.9.1 工具 16
1.9.2 启动和停止应用服务器 17
1.9.3 启动Admin Console 18
1.9.4 启动和停止Java DB数据库服务器 18
1.9.5 调试Java EE应用 18
第一部分 网页层 21
第2章 Web应用起步 21
2.1 Web应用生命周期 22
2.2 Web模块 24
2.2.1 打包Web模块 25
2.2.2 部署WAR文件 25
2.2.3 测试已部署的Web模块 27
2.2.4 列出已部署的Web模块 27
2.2.5 更新Web模块 27
2.2.6 取消部署Web模块 29
2.3 配置Web应用 29
2.3.1 将URL映射到Web组件 29
2.3.2 声明欢迎文件 31
2.3.3 设置初始化参数 31
2.3.4 将错误映射到错误屏幕 32
2.3.5 声明资源引用 33
2.4 Duke's Bookstore示例 35
2.5 从Web应用访问数据库 35
2.5.1 填充示例数据库 35
2.5.2 在应用服务器中创建数据源 36
2.6 更多内容 36
第3章 Java Servlet技术 37
3.1 什么是Servlet 37
3.2 示例Servlets 37
3.3 Servlet生命周期 39
3.3.1 处理Servlet生命周期事件 39
3.3.2 处理错误 41
3.4 共享信息 41
3.4.1 使用作用域对象 41
3.4.2 控制对共享资源的并发访问 42
3.4.3 访问数据库 43
3.5 初始化Servlet 44
3.6 编写服务方法 44
3.6.1 获取来自请求的信息 44
3.6.2 构建响应 45
3.7 过滤请求和响应 48
3.7.1 编写过滤器 48
3.7.2 编写自定义请求和响应 49
3.7.3 指定过滤器映射 50
3.8 调用其他Web资源 52
3.8.1 在响应中包括其他资源 53
3.8.2 将控制转移到其他的Web资源 54
3.9 访问Web上下文 54
3.10 维护客户端状态 55
3.10.1 访问会话 55
3.10.2 将对象与会话相关联 55
3.10.3 会话管理 56
3.10.4 会话追踪 56
3.11 终结Servlet 57
3.11.1 追踪服务请求 57
3.11.2 通知方法关闭 58
3.11.3 创建友好的长时间运行的方法 59
3.12 更多内容 59
第4章 JSP技术 60
4.1 什么是JSP页面 60
4.2 JSP页面示例 62
4.3 JSP页面的生命周期 66
4.3.1 转换和编译 66
4.3.2 执行 67
4.4 创建静态内容 68
4.5 创建动态内容 68
4.6 统一表达式语言 69
4.6.1 立即求值和延迟求值语法 70
4.6.2 值表达式和方法表达式 71
4.6.3 定义标签属性类型 76
4.6.4 去活表达式求值 76
4.6.5 直接量表达式 77
4.6.6 解析表达式 78
4.6.7 隐式对象 79
4.6.8 运算符 80
4.6.9 保留字 81
4.6.10 示例 81
4.6.11 函数 82
4.7 JavaBeans组件 83
4.7.1 JavaBeans组件设计约定 83
4.7.2 创建和使用JavaBeans组件 84
4.7.3 设置JavaBeans组件特性 84
4.7.4 获取JavaBeans组件特性 86
4.8 使用自定义标签 86
4.8.1 声明标签库 87
4.8.2 引入标签库实现 88
4.9 在JSP页面中复用内容 88
4.10 将控制转移到其他Web组件 89
4.11 加入小应用程序 89
4.12 为一组JSP页面设置特性 91
4.13 更多内容 94
第5章 JSP文档 95
5.1 JSP文档示例 95
5.2 创建JSP文档 97
5.2.1 声明标签库 98
5.2.2 在JSP文档中加入指令 99
5.2.3 创建静态和动态内容 100
5.2.4 使用jsp:root元素 102
5.2.5 使用jsp:output元素 103
5.3 向容器标识JSP文档 105
第6章 JavaServer Pages标准标签库 106
6.1 JSP页面示例 106
6.2 使用JSTL 107
6.3 核心标签库 108
6.3.1 变量支持标签 109
6.3.2 流程控制标签 110
6.3.3 URL标签 112
6.3.4 杂项标签 113
6.4 XML标签库 113
6.4.1 核心标签 114
6.4.2 流程控制标签 115
6.4.3 转换标签 115
6.5 国际化标签库 116
6.5.1 设置地区 116
6.5.2 消息标签 116
6.5.3 Formatting标签 117
6.6 SQL标签库 117
6.7 函数 120
6.8 更多内容 121
第7章 JSP页面中的自定义标签 122
7.1 什么是自定义标签 122
7.2 JSP页面示例 122
7.3 标签类型 124
7.3.1 带属性的标签 124
7.3.2 带有正文的标签 126
7.3.3 定义变量的标签 127
7.3.4 标签之间的通信 127
7.4 使用标签文件来封装可重用内容 127
7.4.1 标签文件位置 129
7.4.2 标签文件指令 129
7.4.3 对传递给标签文件的片断进行求值 134
7.4.4 示例 134
7.5 标签库描述符 137
7.5.1 顶级的标签库描述符元素 137
7.5.2 声明标签文件 138
7.5.3 声明标签处理器 139
7.5.4 针对标签处理器声明标签属性 140
7.5.5 针对标签处理器声明标签变量 141
7.6 编写简单标签处理器 142
7.6.1 在Web应用中加入标签处理器 143
7.6.2 简单标签处理器如何调用 143
7.6.3 基本标签的标签处理器 143
7.6.4 带属性标签的标签处理器 143
7.6.5 带正文标签的标签处理器 145
7.6.6 定义变量的标签的标签处理器 146
7.6.7 标签协同操作 148
7.6.8 示例 149
第8章 JSP页面中的脚本编程 155
8.1 JSP页面示例 155
8.2 使用脚本编程 156
8.3 禁用脚本编程 156
8.4 声明 156
8.5 Scriptlet 157
8.6 表达式 158
8.7 编写可接受脚本编程元素的标签 158
8.7.1 TLD元素 158
8.7.2 标签处理器 158
8.7.3 带正文的标签 160
8.7.4 协同操作 161
8.7.5 定义变量的标签 162
第9章 JavaServer Faces技术 163
9.1 JavaServer Faces技术的好处 164
9.2 什么是JavaServer Faces应用 164
9.3 一个简单的JavaServer Faces应用 164
9.3.1 开发过程中的步骤 165
9.3.2 映射FacesServlet实例 166
9.3.3 创建页面 166
9.3.4 定义页面导航 170
9.3.5 配置错误消息 171
9.3.6 开发Bean 171
9.3.7 添加托管Bean声明 172
9.4 用户界面组件模型 173
9.4.1 用户界面组件类 173
9.4.2 组件呈现模型 174
9.4.3 转换模型 176
9.4.4 事件和监听器模型 177
9.4.5 验证模型 178
9.5 导航模型 178
9.6 后台Bean 180
9.7 JavaServer Faces页面的生命周期 183
9.8 更多内容 186
第10章 在JSP页面中使用JavaServer Faces技术 187
10.1 JavaServer Faces应用示例 187
10.2 设置页面 189
10.3 使用核心标签 191
10.4 使用HTML组件标签将UI组件添加到页面 192
10.4.1 UI组件标签属性 192
10.4.2 加入窗体组件 194
10.4.3 使用文本组件 194
10.4.4 使用命令组件来执行活动和导航 198
10.4.5 使用数据绑定表组件 199
10.4.6 使用graphicImage标签来加入图形和图像 201
10.4.7 使用UIPanel组件来布局组件 202
10.4.8 呈现选择一个值的组件 203
10.4.9 呈现选择多个值的组件 205
10.4.10 UISelectItem、UISelectItems和UISelectItemGroup组件 206
10.4.11 使用message和messages标签显示错误消息 208
10.5 使用本地化数据 208
10.5.1 加载资源包 209
10.5.2 引用本地化静态数据 209
10.5.3 引用错误消息 210
10.6 使用标准转换器 211
10.6.1 转换组件值 212
10.6.2 使用DateTimeConverter 212
10.6.3 使用NumberConverter 214
10.7 在组件上注册监听器 214
10.7.1 在组件上注册值变化监听器 215
10.7.2 在组件上注册活动组件 215
10.8 使用标准验证器 216
10.8.1 验证组件值 217
10.8.2 使用LongRangeValidator 217
10.9 绑定组件值和实例到外部数据源 218
10.9.1 绑定组件值到特性 219
10.9.2 绑定组件值到隐式对象 220
10.9.3 绑定组件实例到Bean特性 220
10.10 绑定转换器、监听器和验证器到后台Bean特性 221
10.11 引用后台Bean方法 222
10.11.1 引用执行导航的方法 222
10.11.2 引用处理活动事件的方法 223
10.11.3 引用执行验证的方法 223
10.11.4 引用处理值变化事件的方法 223
10.12 使用自定义对象 224
10.12.1 使用自定义转换器 224
10.12.2 使用自定义验证器 225
10.12.3 使用自定义组件 226
第11章 使用JavaServer Faces技术进行开发 228
11.1 编写Bean特性 228
11.1.1 编写绑定到组件值的特性 229
11.1.2 编写绑定到组件实例的特性 234
11.1.3 编写绑定到转换器、监听器或验证器的特性 235
11.2 执行本地化 235
11.2.1 创建资源包 235
11.2.2 本地化动态数据 236
11.2.3 本地化消息 236
11.3 创建自定义转换器 237
11.4 实现事件监听器 239
11.4.1 实现值变化监听器 239
11.4.2 实现活动监听器 240
11.5 创建自定义验证器 241
11.5.1 实现Validator接口 242
11.5.2 创建自定义标签 244
11.6 编写后台Bean方法 245
11.6.1 编写处理导航的方法 246
11.6.2 编写处理活动事件的方法 247
11.6.3 编写可执行验证的方法 247
11.6.4 编写处理值变化事件的方法 248
第12章 创建自定义UI组件 249
12.1 确定是否需要自定义组件或呈现器 249
12.1.1 何时使用自定义组件 249
12.1.2 何时使用自定义呈现器 250
12.1.3 组件、呈现器和标签组合 251
12.2 理解图像映射示例 251
12.2.1 为什么使用JavaServer Faces技术来实现图像映射 251
12.2.2 理解所呈现的HTML 252
12.2.3 理解JSP页面 252
12.2.4 配置模型数据 253
12.2.5 应用类总结 254
12.3 创建自定义组件的步骤 255
12.4 创建自定义组件类 256
12.4.1 指定组件家族 257
12.4.2 执行编码 258
12.4.3 执行解码 259
12.4.4 启用组件特性来接受表达式 260
12.4.5 保存和恢复状态 260
12.5 将呈现操作委托给呈现器 261
12.5.1 创建呈现器类 261
12.5.2 确定呈现器类型 263
12.6 处理针对自定义组件的事件 263
12.7 创建组件标签处理器 264
12.7.1 获取组件类型 264
12.7.2 设置组件特性值 264
12.7.3 提供呈现器类型 266
12.7.4 释放资源 266
12.8 在标签库描述符中定义自定义组件标签 267
第13章 配置JavaServer Faces应用 269
13.1 应用配置资源文件 269
13.2 配置Bean 270
13.2.1 使用managed-bean元素 270
13.2.2 使用managed-property元素初始化特性 272
13.2.3 初始化Map和List 276
13.3 注册自定义错误消息 276
13.4 注册自定义本地化静态文本 277
13.5 注册自定义验证器 278
13.6 注册自定义转换器 278
13.7 配置导航规则 279
13.8 使用呈现工具箱注册自定义呈现器 281
13.9 注册自定义组件 282
13.10 JavaServer Faces应用的基本需求 283
13.10.1 使用部署描述符来配置应用 284
13.10.2 加入所需要的JAR文件 289
13.10.3 加入类、页面和其他资源 289
第14章 国际化和本地化Web应用 290
14.1 Java平台本地化类 290
14.2 提供本地化消息和标记 290
14.2.1 确定区域设置 291
14.2.2 设置资源包 291
14.2.3 获取本地化消息 292
14.3 日期和数字格式化 293
14.4 字符集和编码 293
14.4.1 字符集 293
14.4.2 字符编码 294
14.5 更多内容 296
第二部分 Web服务第15章 使用JAX-WS来创建Web服务 297
15.1 设置端口 297
15.2 使用JAX-WS创建简单的Web服务和客户端 297
15.2.1 JAX-WS湍点的需求 298
15.2.2 编写服务端点实现类 299
15.2.3 创建、打包和部署服务 299
15.2.4 在不使用客户端的情况下测试服务 300
15.2.5 一个简单的JAX-WS客户端 300
15.3 JAX-WS所支持的类型 302
15.4 Web服务互操作性和JAX-WS 302
15.5 更多内容 302
第16章 XML模式和Java类之间的绑定 304
16.1 JAXB体系结构 304
16.1.1 体系结构概述 304
16.1.2 JAXB绑定过程 305
16.1.3 有关反编排的更多内容 306
16.1.4 有关编排的更多内容 306
16.1.5 有关验证的更多内容 306
16.2 表示XML内容 306
16.3 绑定XML模式 306
16.3.1 简单类型定义 306
16.3.2 默认数据类型绑定 307
16.4 自定义JAXB绑定 308
16.4.1 模式到Java 308
16.4.2 Java到模式 308
16.5 示例 312
16.5.1 JAXB编译器选项 314
16.5.2 JAXB模式生成器选项 315
16.5.3 关于模式到Java绑定 315
16.5.4 模式派生的JAXB类 318
16.6 Basic示例 320
16.6.1 Modify Marshal示例 320
16.6.2 Unmarshal Validate示例 321
16.7 自定义JAXB绑定 322
16.7.1 进行自定义的原因 322
16.7.2 自定义概述 323
16.7.3 Customize Inline示例 330
16.7.4 Datatype Converter示例 334
16.7.5 绑定声明文件 335
16.7.6 External Customize示例 337
16.8 Java-to-Schema示例 338
16.8.1 j2s-create-marshal示例 338
16.8.2 j2s-xmlAccessorOrder示例 338
16.8.3 j2s-xmlAdapter-field示例 340
16.8.4 j2s-xmlAttribute-field示例 343
16.8.5 j2s-xmlRootElement示例 344
16.8.6 j2s-xmlSchemaType-class示例 344
16.8.7 j2s-xmlType示例 345
16.9 更多内容 346
第17章 StAX 347
17.1 StAX诞生的原因 347
17.1.1 流和DOM 347
17.1.2 拉解析和推解析 348
17.1.3 StAX用例 348
17.1.4 比较StAX和其他JAXP API 349
17.2 StAX API 349
17.2.1 光标API 349
17.2.2 迭代器API 350
17.2.3 在光标API和迭代器API之间进行选择 353
17.3 使用StAX 354
17.3.1 StAX工厂类 354
17.3.2 资源、命名空间和错误 355
17.3.3 读取XML流 355
17.3.4 编写XML流 357
17.4 Sun的流式XML解析器实现 359
17.4.1 报告CDATA事件 359
17.4.2 流式XML解析器工厂实现 359
17.5 示例代码 360
17.5.1 示例代码组织 360
17.5.2 示例XML文档 361
17.5.3 Cursor示例 361
17.5.4 Cursor-to-Event示例 363
17.5.5 Event示例 364
17.5.6 Filter示例 366
17.5.7 Read-and-Write示例 368
17.5.8 Writer示例 370
17.6 更多内容 371
第18章 SAAJ 373
18.1 SAAJ概述 373
18.1.1 消息 373
18.1.2 连接 375
18.2 教程 376
18.2.1 创建和发送简单消息 376
18.2.2 添加内容到标题 382
18.2.3 添加内容到SOAPPart对象 383
18.2.4 添加文档到SOAP正文 383
18.2.5 使用SAAJ或DOM API来操作消息内容 384
18.2.6 添加附件 384
18.2.7 添加属性 386
18.2.8 使用SOAP Fault 390
18.3 代码示例 393
18.3.1 Request.java 393
18.3.2 MyUddiPing.java 394
18.3.3 HeaderExample.java 400
18.3.4 DOMExample.java和DOMSrcExample.java 402
18.3.5 Attachments.java 405
18.3.6 SOAPFaultTest.java 407
18.4 更多内容 409
第19章 JAXR 410
19.1 JAXR概述 410
19.1.1 什么是注册表 410
19.1.2 什么是JAXR 410
19.1.3 JAXR体系结构 411
19.2 实现JAXR客户端 412
19.2.1 建立连接 412
19.2.2 查询注册表 415
19.2.3 管理注册表数据 418
19.2.4 在JAXR客户端中使用分类法 423
19.3 运行客户端示例 427
19.3.1 在编译示例之前 428
19.3.2 编译示例 428
19.3.3 运行示例 429
19.4 在Java EE应用中使用JAXR客户端 435
19.4.1 编写应用客户端:MyAppClient.java 436
19.4.2 编写PubQuery会话Bean 436
19.4.3 编辑特性文件 436
19.4.4 启动应用服务器 436
19.4.5 创建JAXR资源 436
19.4.6 使用NetBeans 5.5创建、部署和运行应用 437
19.4.7 使用Ant创建、部署和运行应用 438
19.5 更多内容 439
第三部分 企业Bean第20章 企业Bean 441
20.1 什么是企业Bean 441
20.1.1 企业Bean的优点 441
20.1.2 何时使用企业Bean 441
20.1.3 企业Bean的类型 442
20.2 什么是会话Bean 442
20.2.1 状态管理模式 442
20.2.2 何时使用会话Bean 443
20.3 什么是消息驱动Bean 443
20.3.1 消息驱动Bean和会话Bean的区别 443
20.3.2 何时使用消息驱动Bean 444
20.4 使用接口定义客户端访问 444
20.4.1 远程客户端 445
20.4.2 本地客户端 445
20.4.3 决定远程访问或本地访问 446
20.4.4 Web服务客户端 446
20.4.5 方法参数和访问 447
20.5 企业Bean的内容 447
20.6 企业Bean的命名约定 448
20.7 企业Bean的生命周期 448
20.7.1 状态化会话Bean的生命周期 448
20.7.2 无状态会话Bean的生命周期 449
20.7.3 消息驱动Bean的生命周期 449
20.8 更多内容 449
第21章 企业Bean起步 450
21.1 创建企业Bean 450
21.1.1 编写企业Bean 450
21.1.2 编译和打包converter示例 451
21.2 创建应用客户端 452
21.2.1 编写应用客户端 452
21.2.2 编译应用客户端 453
21.3 创建Web客户端 453
21.3.1 编写Web客户端 453
21.3.2 编译Web客户端 455
21.4 部署Java EE应用 455
21.4.1 使用NetBeans 5.5部署converter示例 455
21.4.2 使用Ant部署converter示例 455
21.5 运行应用客户端 455
21.5.1 使用NetBeans 5.5运行应用客户端 455
21.5.2 使用Ant运行应用客户端 455
21.6 运行Web客户端 456
21.7 修改Java EE应用 456
第22章 会话Bean示例 458
22.1 cart示例 458
22.1.1 会话Bean类 459
22.1.2 remove方法 461
22.1.3 助手类 461
22.1.4 创建、打包、部署和运行cart示例 462
22.1.5 取消部署cart示例 463
22.2 一个Web服务示例:helloservice 463
22.2.1 Web服务端点实现类 463
22.2.2 无状态会话Bean实现类 464
22.2.3 创建、打包、部署和测试helloservice示例 464
22.3 使用定时器服务 465
22.3.1 Timeout方法 465
22.3.2 创建定时器 466
22.3.3 取消和保存定时器 466
22.3.4 获取定时器信息 466
22.3.5 事务和定时器 467
22.3.6 timersession示例 467
22.3.7 创建、打包、部署和运行timersession示例 468
22.4 处理异常 469
第23章 消息驱动Bean示例 470
23.1 示例应用概述 470
23.2 应用客户端 470
23.3 消息驱动Bean类 471
23.4 打包、部署和运行SimpleMessage示例 472
23.4.1 创建被管理对象 472
23.4.2 使用NetBeans 5.5创建、部署和运行应用 473
23.4.3 使用Ant创建、部署和运行应用 473
23.4.4 删除被管理的对象 474
23.5 为消息驱动Bean创建部署描述符 474
第四部分 持久化 475
第24章 Java持久化API介绍 475
24.1 实体 475
24.1.1 实体类的要求 475
24.1.2 实体类中的持久性字段和特性 475
24.1.3 实体中的主键 477
24.1.4 实体关系中的多样性 478
24.1.5 实体关系中的方向 478
24.1.6 实体继承性 479
24.2 管理实体 482
24.2.1 持久化上下文 482
24.2.2 EntityManager 483
24.2.3 持久化单元 486
第25章 Web层中的持久化 488
25.1 从Web应用访问数据库 488
25.1.1 定义持久化单元 489
25.1.2 创建实体类 489
25.1.3 获取对实体管理器的访问 490
25.1.4 从数据库访问数据 491
25.1.5 更新数据库中的数据 492
第26章 EJB层中的持久化 494
26.1 order应用 494
26.1.1 order应用中的实体关系 494
26.1.2 order应用中的主键 496
26.1.3 映射到多个表的实体 498
26.1.4 order应用中的级联操作 498
26.1.5 order应用中的BLOB和CLOB数据库类型 499
26.1.6 order应用中的临时类型 499
26.1.7 管理order应用的实体 500
26.1.8 创建和运行order应用 501
26.2 roster应用 504
26.2.1 roster应用中的关系 504
26.2.2 roster应用中的实体继承性 505
26.2.3 roster应用中的自动表生成 506
26.2.4 创建和运行roster应用 507
第27章 Java持久化查询语言 509
27.1 术语 509
27.2 简化语法 509
27.2.1 Select语句 509
27.2.2 Update和Delete语句 510
27.3 示例查询 510
27.3.1 简单查询 510
27.3.2 导航到相关实体的查询 511
27.3.3 使用其他条件表达式的查询 512
27.3.4 批量更新和删除 513
27.4 完整语法 514
27.4.1 BNF符号 514
27.4.2 Java持久化查询语言的BNF语法 514
27.4.3 FROM子句 518
27.4.4 Path表达式 520
27.4.5 WHERE子句 521
27.4.6 SELECT子句 526
27.4.7 ORDER BY子句 528
27.4.8 GROUP BY子句 528
第五部分 服务 529
第28章 Java EE中的安全性介绍 529
28.1 概述 529
28.1.1 一个简单示例 530
28.1.2 安全性功能 531
28.1.3 应用安全性的特性 532
28.2 安全性实现机制 532
28.2.1 Java SE安全性实现机制 533
28.2.2 Java EE安全性实现机制 533
28.3 保护容器 535
28.3.1 使用部署描述符来用于声明式安全性 535
28.3.2 使用注释 536
28.3.3 使用编程式安全性 536
28.4 保护应用服务器 537
28.5 使用领域、用户、组和角色 537
28.5.1 什么是领域、用户、组和角色 538
28.5.2 管理应用服务器上的用户和组 540
28.5.3 设置安全性角色 541
28.5.4 映射角色到用户和组 542
28.6 使用SSL建立安全连接 542
28.6.1 安装和配置SSL支持 543
28.6.2 在应用部署描述符文件中指定一个安全连接 543
28.6.3 核实SSL支持 544
28.6.4 使用数字证书 544
28.6.5 在SSL上启用双向认证 548
28.7 更多内容 550
第29章 保护Java EE应用 551
29.1 保护企业Bean 551
29.1.1 访问企业Bean调用者的安全性上下文 552
29.1.2 声明从企业Bean代码中所引用的安全性角色名 553
29.1.3 定义企业Bean的安全性视图 555
29.1.4 使用企业Bean安全性注释 563
29.1.5 使用企业Bean安全性部署描述符 563
29.1.6 配置IOR安全性 564
29.1.7 部署安全的企业Bean 566
29.2 企业Bean示例应用 567
29.2.1 示例:保护企业Bean 567
29.2.2 示例:使用isCallerInRole和getCallerPrincipal方法 571
29.2.3 讨论:保护Duke's Bank示例 575
29.3 保护应用客户端 575
29.3.1 使用登录模块 576
29.3.2 使用可编程式登录 576
29.4 保护EIS应用 576
29.4.1 容器托管登录 577
29.4.2 组件托管登录 577
29.4.3 配置资源适配器安全性 577
29.4.4 映射应用主体到ESI主体 578
29.5 在应用服务器中的示例应用 579
29.6 更多内容 579
第30章 保护Web应用 581
30.1 概述 581
30.2 使用安全性角色 582
30.2.1 声明安全性角色 582
30.2.2 映射安全性角色到应用服务器组 584
30.3 以编程方式检查调用者的标识 585
30.4 针对Web应用定义安全性需求 587
30.4.1 使用注释声明安全性需求 588
30.4.2 在部署描述符中声明安全性需求 589
30.4.3 指定安全连接 594
30.4.4 指定认证机制 595
30.5 示例:保护Web应用 600
30.5.1 示例:通过JSP页面使用基于窗体的认证 601
30.5.2 示例:通过Servlet使用基本认证 608
30.5.3 示例:通过JAX-WS使用基本认证 613
30.6 更多内容 618
第31章 Java消息服务API 619
31.1 概述 619
31.1.1 什么是消息传递 619
31.1.2 什么是JMS API 619
31.1.3 何时使用JMS API 620
31.1.4 JMS API如何与Java EE平台一起工作 621
31.2 基本的JMS API概念 621
31.2.1 JMS API体系结构 621
31.2.2 消息传递域 622
31.2.3 消息使用 624
31.3 JMS API编程模型 624
31.3.1 被管对象 625
31.3.2 连接 626
31.3.3 会话 626
31.3.4 消息生成者 627
31.3.5 消息使用者 627
31.3.6 消息 629
31.3.7 队列浏览器 630
31.3.8 异常处理 631
31.4 编写简单的JMS客户端应用 631
31.4.1 一个简单的同步消息接收示例 632
31.4.2 一个简单的异步消息使用示例 638
31.4.3 一个浏览队列中消息的简单示例 642
31.4.4 在多个系统上运行JMS客户端程序 646
31.5 创建强健的JMS应用 649
31.5.1 使用基本可靠性机制 649
31.5.2 使用高级可靠性机制 654
31.6 在Java EE应用中使用JMS API 662
31.6.1 在Java EE组件中使用@Resource注释 663
31.6.2 使用会话Bean生成和同步接收消息 663
31.6.3 使用消息驱动Bean 664
31.6.4 管理分布式事务 665
31.6.5 通过应用客户端和Web组件使用JMS API 666
31.7 更多内容 667
第32章 使用JMS API的Java EE示例 668
32.1 通过会话Bean使用JMS API的Java EE应用 668
32.1.1 编写应用组件 669
32.1.2 创建针对应用的资源 670
32.1.3 使用NetBeans 5.5创建、部署和运行应用 671
32.1.4 使用Ant创建、部署和运行应用 671
32.2 一个通过实体使用JMS API的Java EE应用 672
32.2.1 人力资源应用概述 673
32.2.2 编写应用组件 673
32.2.3 创建针对应用的资源 675
32.2.4 使用NetBeans 5.5创建、部署和运行应用 676
32.2.5 使用Ant创建、部署和运行应用 677
32.3 一个使用来自远程服务器消息的应用示例 679
32.3.1 模块概述 679
32.3.2 编写模块组件 680
32.3.3 创建针对模块的资源 680
32.3.4 使用两个应用服务器 680
32.3.5 使用NetBeans 5.5创建、部署和运行模块 681
32.3.6 使用Ant创建、部署和运行模块 682
32.4 一个在两个服务器上部署消息驱动Bean的应用示例 683
32.4.1 模块概述 684
32.4.2 编写模块组件 685
32.4.3 创建针对模块的资源 685
32.4.4 使用两个应用服务器 686
32.4.5 使用NetBeans 5.5创建、部署和运行模块 686
32.4.6 使用Ant创建、部署和运行模块 688
第33章 事务 691
33.1 什么是事务 691
33.2 容器托管事务 691
33.2.1 事务属性 692
33.2.2 回退容器托管事务 694
33.2.3 同步会话Bean的实例变量 694
33.2.4 容器托管事务中不允许的方法 695
33.3 Bean托管事务 695
33.3.1 JTA事务 695
33.3.2 在不提交的情况下返回 696
33.3.3 Bean托管事务中不允许的方法 696
33.4 事务超时 696
33.5 更新多个数据库 696
33.6 Web组件中的事务 697
第34章 资源连接 698
34.1 资源和JNDI命名 698
34.2 DataSource对象和连接池 699
34.3 资源注入 699
34.3.1 基于字段的注入 700
34.3.2 基于方法的注入 701
34.3.3 基于类的注入 701
34.4 confirmer示例应用 702
34.5 更多内容 704
第35章 连接器体系结构 705
35.1 关于资源适配器 705
35.2 资源适配器契约 706
35.2.1 管理契约 706
35.2.2 出站契约 707
35.2.3 入站契约 707
35.3 公共客户端接口 708
35.4 更多内容 709
第六部分 案例研究第36章 Coffee Break应用 711
36.1 公共代码 711
36.2 JAX-WS咖啡供应商服务 711
36.3 SAAJ咖啡供应商服务 713
36.3.1 SAAJ客户端 713
36.3.2 SAAJ服务 718
36.4 Coffee Break服务器 722
36.4.1 JSP页面 723
36.4.2 JavaBeans组件 724
36.4.3 RetailPriceListServlet 725
36.4.4 资源配置 726
36.5 创建、打包、部署和运行应用程序 726
36.5.1 设置端口 726
36.5.2 创建、打包和部署JAX-WS服务 727
36.5.3 创建、打包和部署SAAJ服务 727
36.5.4 创建、打包和部署Coffee Break服务器 728
36.5.5 运行Coffee Break客户端 728
36.5.6 删除Coffee Break应用程序 728
第37章 Duke's Bank应用 730
37.1 企业Bean 730
37.1.1 会话Bean 731
37.1.2 Java Persistence实体 732
37.1.3 助手类 733
37.1.4 数据库表 733
37.1.5 保护企业Bean 734
37.2 应用客户端 734
37.2.1 类和它们的关系 735
37.2.2 BankAdmin类 735
37.3 Web客户端 736
37.3.1 设计策略 737
37.3.2 客户端组件 738
37.3.3 请求处理 739
37.3.4 保护Web客户端资源 741
37.4 创建、打包、部署和运行应用 742
37.4.1 设置服务器 742
37.4.2 使用NetBeans 5.5创建、打包和部署Duke's Bank 743
37.4.3 使用Ant创建、打包和部署Duke's Bank 743
37.4.4 使用NetBeans 5.5运行应用客户端 743
37.4.5 使用Ant运行应用客户端 743
37.4.6 运行Web客户端 744
附录 745
附录A Java编码方案 745
附录B Java EE认证考试的准备 746