第1部分 快速入门 5
第1章 定义企业级应用 7
1.1 介绍企业级应用 7
1.1.1 网站不仅要漂亮 8
1.1.2 企业级应用的结构 9
1.1.3 企业级应用组件 11
1.2 J2EE介绍 13
1.2.1 企业级Java简史 13
1.2.2 了解J2EE 14
1.2.3 并不仅仅用于企业级应用 17
1.2.4 决定使用哪个部分 17
1.3 准备工作 18
1.3.1 下载并安装J2EE 18
1.3.2 决定项目类型 19
1.4 小结 20
第2章 介绍企业级应用 21
2.1 公司对客户应用 22
2.1.1 例1:电子商务网站 22
2.1.2 例2:机票预订系统 23
2.2 企业对企业应用 25
2.2.1 存货系统 25
2.2.2 电子支付 26
2.3 后台应用 27
2.3.1 通信应用 27
2.3.2 月度电子新闻 27
2.4 小结 28
第2部分 内容发布 29
第3章 使用Servlet创建动态内容 31
3.1 什么是Servlet 31
3.2.1 使用Servlet创建静态页面 32
3.2 创建基本的HttpServlet 32
3.2.2 在哪里运行Servlet 34
3.2.3 增加动态元素 36
3.3 介绍Servlet API 39
3.3.1 Servlet家族 39
3.3.2 ServletRequest家族 41
3.3.3 ServletResponse家族 42
3.4 保存和共享信息 43
3.4.1 会话跟踪 43
3.4.2 使用ServletContext 44
3.5 使用filter(),forward(),include()方法增加新功能 44
3.5.1 在Servlet中使用过滤器 44
3.5.2 使用forward()在servlet间转移控制 47
3.5.3 在不同资源间拼接内容 48
3.6 小结 49
4.1 创建基本的JSP页面 51
第4章 使用JSP 51
4.1.1 创建、保存和访问JSP页面 52
4.1.2 JSP的生命周期 52
4.1.3 在JSP中增加动态元素 54
4.2 在JSP中增加Java特征 56
4.2.1 在JSP中嵌入Java代码 56
4.2.2 使用JSP指令 58
4.2.3 使用动作传输控制 60
4.2.4 访问内部Java对象 61
4.3 添加JavaBean 62
4.3.1 Bean属性协定 62
4.3.2 JSP Bean标记 64
4.4 使用自定义标记 66
4.4.1 返回当前时间的类 67
4.4.2 标记库描述器 68
4.4.4 在标记中增加标记 69
4.4.3 在JSP页面中使用自定义标记 69
4.4.5 自定义标记的属性 70
4.5 同时使用JSP和Servlet 72
4.6 小结 72
第5章 使用JavaMail发送和接收电子邮件 73
5.1 什么是电子邮件 73
5.1.1 电子邮件的一天 73
5.1.2 邮件的格式 75
5.1.3 服务器的类型 78
5.2 介绍JavaMail 80
5.2.1 JavaMail包 80
5.2.2 JavaMail需求 80
5.2.3 下载JavaMail 80
5.2.4 JavaMail术语 80
5.3.1 设置电子邮件 81
5.3 发送电子邮件 81
5.3.2 构造邮件 83
5.3.3 发送邮件 85
5.3.4 发送到新闻组 85
5.3.5 带附件的邮件 86
5.4 接收电子邮件 89
5.4.1 准备接收邮件 89
5.4.2 管理收到的邮件 91
5.5 建立电子邮件过滤器 93
5.5.1 构造一个查询 93
5.5.2 管理邮件 95
5.6 小结 97
第3部分 数据库搜索 99
第6章 操作关系型数据库 101
6.1 什么是关系型数据库 101
6.1.1 关系型数据库中的数据是如何组织的 102
6.1.2 协商通信的语言 103
6.1.3 查找可用数据库 104
6.2 在RDBMS中定义信息 104
6.2.1 SQL介绍 104
6.2.2 数据库设计 105
6.2.3 使用数据类型表示数据 106
6.2.4 表管理 107
6.2.5 提高数据库性能 109
6.3 数据管理 111
6.3.1 增加新的记录 111
6.3.2 修改现存的记录 112
6.3.3 删除行 113
6.4 信息查询 113
6.4.1 创建简单查询 113
6.4.2 实现复杂查询 115
6.5 小结 117
第7章 使用JDBC操作关系型数据库 119
7.1 Java对数据库的抽象 119
7.1.1 JDBC简史 119
7.1.2 隐藏实现 120
7.2 应用JDBC 121
7.2.1 查找JDBC类 122
7.2.2 介绍JDBC驱动程序 122
7.2.3 查找适合自己数据库的驱动程序 124
7.3 连接数据库 125
7.3.1 表示单一数据库连接 125
7.3.2 使用核心类建立连接 126
7.3.3 使用企业级类建立连接 128
7.4 数据库数据结构 131
7.4.1 将SQL数据类型转换成Java数据类型 131
7.4.2 表示查询返回的信息 132
7.4.3 利用获得的结果 137
7.4.4 管理自定义的数据类型 139
7.5 操作数据库 143
7.5.1 在Java中描述一个SQL语句 143
7.5.2 查询数据库 146
7.5.3 修改数据库 148
7.6 使用企业级特征 149
7.6.1 动作批处理 149
7.6.2 为快速访问缓冲语句 151
7.6.3 事务管理 152
7.7 小结 154
第8章 使用目录服务和LDAP 155
8.1 介绍目录服务 155
8.1.1 什么是目录服务 155
8.2 介绍LDAP 157
8.1.2 何时使用目录服务 157
8.2.1 LDAP历史简介 158
8.2.2 LDAP数据库如何构造数据 158
8.2.3 标准语言 160
8.2.4 使用LDAP的软件 161
8.3 在LDAP数据库中定义信息 161
8.3.1 设计新的数据库 161
8.3.2 标准的LDAP介绍 165
8.4 数据库交互 168
8.4.1 连接数据库 168
8.4.2 查询LDAP数据库 168
8.4.3 修改LDAP数据库中的值 169
8.5 自定义数据结构 170
8.5.1 数据层次 170
8.5.2 复制 171
8.5.3 模式 172
8.6 小结 174
第9章 使用JNDI访问目录服务 175
9.1 Java对目录服务的抽象 175
9.1.1 JNDI简史 175
9.1.2 实现隐藏 176
9.1.3 包和类 177
9.2 连接一个服务 177
9.2.1 连接内容 177
9.2.2 连接命名服务 179
9.2.3 连接目录服务 182
9.3 操作数据库 184
9.3.1 一般查询 184
9.3.2 修改现存数据 187
9.3.3 改变目录服务结构 189
9.4 小结 190
第4部分 使用XML在系统间通信 191
第10章 XML基础 193
10.1 什么是XML 193
10.1.1 创建XML 194
10.1.2 显示XML 196
10.1.3 相同文件的不同视角 196
10.2 XML文档和描述 197
10.2.1 Word中的简历 198
10.2.2 HTML形式的简历 199
10.2.3 XML形式的简历 200
10.3 用于配置的XML 201
10.4 使用XML存储和共享数据 202
10.4.1 使用ObjectOutputStream进行串行化 202
10.4.2 使用XML保存状态 204
10.5 XML语法 205
10.5.1 元素 205
10.5.2 名字空间 207
10.5.3 属性 208
10.6 小结 210
第11章 使用DTD和模式描述文档 211
11.1 生成有效的XML文档 211
11.1.1 阅读DTD 212
11.1.2 文档和DTD的连接 213
11.2 编写文档类型定义 214
11.2.1 元素声明 215
11.2.2 实体声明 217
11.2.3 属性声明 217
11.3 XML有效性检查 218
11.4 使用XML模式描述文档 220
11.4.1 模式的shell 220
11.4.2 元素和属性 221
11.4.3 简单类型 222
11.4.4 复杂类型 223
11.5 小结 226
第12章 使用JAXP解析文档 227
12.1 JAXP简介 227
12.1.1 JAX包 227
12.1.2 安装JAXP和例子 228
12.1.3 安装测试 228
12.1.4 剧本的内容 230
12.1.5 格式良好文档的检查 231
12.1.6 有效性检查 232
12.2 5 SAX研究 234
12.2.1 使用SAX调用 235
12.2.2 使用DefaultHandler处理事件 237
12.3 使用DOM 239
12.3.1 创建一个文档 239
12.3.2 遍历文档 241
12.3.3 创建XML 245
12.4 小结 250
第13章 使用JDOM同XML文档交互 251
13.1 使用JDOM 251
13.1.1 为什么使用JDOM 252
13.1.2 安装JDOM并测试安装 252
13.1.3 再访DOM例子 252
13.2 JDOM API 257
13.2.1 创建文档 257
13.2.2 处理文档 261
13.2.3 输出文档 264
13.3 小结 267
第14章 转换和绑定XML文档 269
14.1 显示XML文档 269
14.1.1 使用级联样式表 269
14.1.2 使用XSLT显示文件 273
14.2 转换XML文档 283
14.2.1 莎士比亚剧本的另一个DTD 283
14.2.2 使用样式表进行转换 285
14.3 用JAXB实现绑定 289
14.3.1 安装和运行JAXB 290
14.3.2 用户素材例子介绍 292
14.3.3 改善绑定模式 293
14.3.4 UserStory.java文件 297
14.4 使用JAXB绑定 306
14.4.1 反列举:从XML文档得到Java对象 306
14.4.2 向内容树添加内容 307
14.4.3 对象的有效性检查 308
14.4.4 列举:由Java对象到XML文档 309
14.4.5 扩展由模式编译器产生的类 310
14.5 小结 313
第5部分 系统抽象 315
15.1 基本的RMI应用组件 317
第15章 探索RMI机制 317
15.1.1 远程接口 318
15.1.2 在服务器上实现远程接口 318
15.1.3 启动服务 319
15.1.4 客户端调整 320
15.1.5 编译代码 321
15.1.6 运行RMI应用程序 321
15.2 运行分布式版本 322
15.2.1 将文件分到两个目录 322
15.2.2 创建和调用安全策略 323
15.2.3 设置代码库 325
15.2.4 从一台机器中的两个目录运行应用程序 325
15.2.6 在两个不同主机上运行程序 326
15.2.5 运行http类服务器 326
15.3 使用非远程对象 328
15.3.1 发送Person对象取代String对象 328
15.3.2 对象串行化 330
15.3.3 性能问题 331
15.4 激活服务 332
15.4.1 改变远程接口的实现 332
15.4.2 修改设置类 333
15.4.3 运行范例 334
15.5 小结 335
第16章 企业级JavaBean 337
16.1 这种新级别抽象的介绍 337
16.1.1 什么是EJB 337
16.1.2 寻找开发环境 339
16.2.1 EJB应用术语 340
16.2 探索EJB服务的组件 340
16.2.2 bean的类型 342
16.2.3 应用范例 344
16.2.4 介绍EJB类和接口 345
16.3 在服务器端使用企业级bean 347
16.3.1 会话bean 347
16.3.2 实体bean 356
16.3.3 本地接口 371
16.3.4 部署bean到EJB服务器 373
16.4 在客户端使用企业级Bean 377
16.4.1 查询并使用bean 377
16.4.2 bean的应用 379
16.5 小结 386
17.1 扩展企业级JavaBean 387
17.1.1 本地bean提供更好性能 387
第17章 高级EJB技术 387
17.1.2 方法和数据的距离 391
17.1.3 bean间通信 395
17.1.4 在事务中组合bean 396
17.2 使用消息驱动bean 398
17.2.1 消息驱动Bean在应用中的角色 398
17.2.2 编写消息驱动bean 400
17.3 理解容器管理持续性 402
17.3.1 介绍CMP概念 402
17.3.2 编写CMP实体bean 404
17.3.3 容器管理的关系 412
17.3.4 EBJ QL 417
17.4 管理bean的安全问题 422
17.4.1 标识用户 422
17.4.2 配置用户访问能力 425
17.5 处理bean的配置问题 430
17.5.2 提供系统未知的配置属性 431
17.5.1 已有的配置技术概述 431
17.6 代码的使用者 433
17.6.1 EJB开发角色 433
17.6.2 非开发角色 434
17.7 小结 435
第18章 介绍CORBA 437
18.1 使用CORBA的需求 437
18.2 CORBA是什么 437
18.3 对象管理体系结构 438
18.3.1 对象服务 438
18.3.2 通用工具 439
18.3.3 域接口 439
18.3.4 应用程序接口 439
18.3.5 对象请求代理 439
18.4 范例:简单的利息计算 456
18.3.6 idltojava编译器 456
18.4.1 第1步:编写IDL接口 457
18.4.2 第2步:编译IDL文件 457
18.4.3 第3步:编写InterestServer 458
18.4.4 第4步:编写客户端代码 462
18.4.5 第5步:编译并运行应用程序 465
18.5 CORBA服务 465
18.6 CORBA和RMI的区别 466
18.7 小结 466
第19章 企业级CORBA应用 467
19.1 建立CORBA对象 467
19.2 开发CORBA服务器 468
19.3 开发CORBA客户端 479
19.3.1 从客户端应用程序访问CORBA对象 479
19.3.2 编译和运行应用程序 482
19.3.3 从Servlet访问CORBA对象 484
19.3.4 编译和运行Servlet 488
19.4 小结 490
第20章 使用Jini服务 491
20.1 快速浏览Jini 491
20.1.1 为什么需要Jini 492
20.1.2 Jini资源 492
20.2 介绍范例 493
20.2.1 Calculator(计算器)接口 493
20.2.2 Adder(加法器类)和Subtractor(减法器类) 493
20.2.3 Client(客户端类) 494
20.3 启动并且运行Jini 494
20.3.1 安装Jini 495
20.3.2 GUI工具 496
20.4 简单代理Jini计算器服务 501
20.4.1 计算器(Calculator)接口 501
20.4.2 加法和减法服务代理 502
20.4.3 创建服务 503
20.4.4 Jini计算器的客户端 505
20.4.5 编译应用程序 508
20.4.6 运行分布式应用程序 508
20.5 在Jini计算器中使用属性 511
20.5.1 设置服务厨性 511
20.5.2 在客户端创建过滤器 513
20.5.3 使用ServiceItemFilter对象 514
20.5.4 运行范例 516
20.6 缓存服务 517
20.6.1 一个简单的查询缓存范例 517
20.6.2 使用ServiceDiscoveryListener 519
20.7 使用RMI桩作为瘦代理 522
20.7.1 RMI版本的代理 522
20.7.2 RMIAddingService 523
20.8 小结 524
第6部分 构建大型系统 525
第21章 实现Web服务 527
21.1 Hello World服务 528
21.1.1 配置Axis 528
21.1.2 Hello World Web服务的客户端 528
21.1.3 一个本地的问候服务 529
21.1.4 使用tcpmon了解幕后细节 530
21.2 理解简单对象访问协议 533
21.2.1 SOAP消息的结构 533
21.2.2 SOAP与HTTP 535
21.3 部署Web服务 535
21.3.1 为例子程序准备环境 536
21.3.2 使用部署描述器 536
21.3.3 运行已部署的服务 537
21.4 使用UDDI查找Web服务 538
21.4.1 UDDI资源 539
21.4.2 通过UDDI探索Web服务 540
21.5 创建并使用WSDL文件 542
21.5.1 从HelloService生成WSDL文件 542
21.5.2 根据WSDL创建客户端 543
21.5.3 使用WSDL文件创建服务 548
21.6 发送Java对象给你的Web服务 549
21.6.1 JavaBean版HelloService的类 550
21.6.2 部署并运行应用程序 552
21.6.3 发送JavaBean 554
21.7 小结 556
第22章 Java消息服务 557
22.1 位于中间的消息 557
22.2 JMS出现之前的情况 557
22.4.1 点到点 558
22.4 消息系统的种类 558
22.3.2 纯JMS供应商 558
22.3.1 提供应用程序独立性的JMS 558
22.3 MOM遭遇JMS 558
22.4.2 发布/订阅 559
22.5 JMS概览 559
22.5.1 消息术语 559
22.5.2 接口概览 560
22.5.3 操作流程概览 561
22.6 JMS系统的建立 563
22.7 被管理对象 563
22.8 发送与接收消息 564
22.8.1 点到点——发送消息 564
22.8.2 点到点——接收消息 566
22.8.3 发布/订阅——发送消息 567
22.8.4 发布/订阅——接收消息 568
22.8.5 消息监听器 569
22.8.6 连接与会话 570
22.9 消息的细节 572
22.9.1 消息标头 572
22.9.2 消息属性 573
22.9.3 消息主体 573
22.10 使用JMS开发应用程序 575
22.10.1 连接与会话 575
22.10.2 资源管理 576
22.10.3 持续性及持续订阅 576
22.10.4 JMS和线程 576
22.10.5 JM5事务 576
22.11 一个范例 577
22.11.1 文本消息的简单收发 577
22.11.2 增添属性 586
22.11.3 增加消息选择 587
22.12.2 消息驱动的bean 589
22.12 JMS和J2EE 589
22.12.1 连接到已有系统 589
22.12.3 分布式应用程序 591
22.13 小结 592
第23章 使用JTA/JTS管理事务 593
23.1 什么是事务 593
23.1.1 事务的特征 593
23.1.2 事务处理术语 594
23.1.3 事务处理组件 595
23.1.4 分布式事务 598
23.1.5 两阶段提交 598
23.1.6 事务处理标准 599
23.2 Java事务服务 601
23.3.1 JTA接口与类 602
23.3.2 UserTransaction接口 602
23.3 Java事务API 602
23.3.3 Status接口 603
23.3.4 Synchronization接口 603
23.4 如何使用JTA/JTS 604
23.4.1 容器管理的事务 604
23.4.2 出错处理 606
23.4.3 会话bean的重新初始化 607
23.4.4 bean管理的事务 610
23.4.5 事务超时 612
23.4.6 事务隔离 613
23.5 ACME饰品公司——购物车演示 614
23.5.1 创建数据库和表 614
23.5.2 订单会话bean 615
23.5.3 库存会话bean 618
23.5.4 目录会话bean 621
23.5.5 购物车客户端应用程序 624
23.5.6 打包与部署 626
23.5.7 建立数据源 627
23.5.8 运行购物车演示程序 628
23.6 小结 628
第24章 系统体系结构问题 629
24.1 设计真实的系统 629
24.1.1 理解客户 630
24.1.2 善待工作伙伴 632
24.2 分割工作负载 633
24.2.1 将工作分摊到不同的应用层 633
24.2.2 当一台机器不够时 634
24.3 选择一种设计方法 636
24.3.1 大规模系统技术的选择 636
24.3.2 设计选择 638
24.4 实现安全性 638
24.4.3 系统安全 639
24.4.1 连接安全 639
24.4.2 数据安全 639
24.4.4 用户安全 640
24.5 小结 640
第25章 J2EE设计模式 641
25.1 设计模式基础 641
25.1.1 什么是设计模式 641
25.1.2 核心Java库里的设计模式 642
25.2 企业级设计模式介绍 645
25.2.1 企业级设计模式的角色 645
25.2.2 J2EE标准企业级设计模式 646
25.3 小结 652
附录A 安装J2EE参考实现 653
附录B J2EE API版本要求 685
附录C J2EE厂商和系统 689