第1章 使用J2EE的原因 1
1.1 引言 1
第Ⅰ部分 技术背景 1
1.2 IT组织面临的挑战 2
1.3 企业级应用程序开发的需求 3
1.4 技术选择 4
1.5 选择Java和J2EE的理由 4
1.6 警告说明 5
1.7 其他内容 6
1.8 参考文献 7
2.1 分布式应用程序或系统的概念 8
2.2 构建分布式程序的理由 8
第2章 分布式系统入门 8
2.3 Java对分布式程序的作用 10
2.4 分布式对象系统 11
2.5 J2EE的作用 13
2.6 在线参考文献 13
第3章 J2EE漫游 14
3.1 引言 14
3.2 J2EE平台 14
3.3 J2EE技术漫游 17
3.3.1 通信服务 18
3.3.2 通用服务 20
3.3.3 组件技术 22
3.4 参考文献 24
4.2 远程方法调用(RMI) 25
4.2.1 远程接口 25
4.1 引言 25
第4章 Java和远程方法调用 25
4.2.2 子类化服务器类 26
4.2.3 运行rmic编译器 29
4.2.4 启动注册表 29
4.3 RMIClient类 30
4.4 RMI的性能 32
4.5 参数传递 36
4.6 在线参考文献 36
第5章 可激活的服务器 37
5.1 引言 37
5.2 扩展RMI 37
5.3 实现可激活的服务器 38
5.3.1 远程接口 38
5.3.2 Client类 38
5.3.3 可激活的服务器 39
5.3.4 服务器设置 40
5.4 运行可激活的客户机/服务器 42
5.5 小结 44
5.6 在线参考文献 44
第6章 JNDI 45
6.1 引言 45
6.2 使用JNDI的必需条件 46
6.3 LDAP 47
6.4 LDAP的功能 48
6.5 使用LDAP 49
6.6 使用JNDI 50
6.7 在LDAP中保存数据 52
6.8 JNDI、RMI和LDAP 55
6.9 小结 56
7.2.1 什么是消息服务 57
7.2 消息服务器和JMS 57
7.2.2 为什么使用消息服务 57
第7章 Java消息服务(JMS) 57
7.1 引言 57
7.2.3 什么是JMS 58
7.2.4 JMS API概念 58
7.3 点对点通信 58
7.4 发布/订阅通信 59
7.5 JMS API 60
7.5.1 连接工厂 60
7.5.2 连接 61
7.5.3 会话 61
7.5.4 消息 62
7.5.5 目标 64
7.5.6 消息生产者 65
7.5.7 消息消费者 66
7.6 点对点应用程序的开发步骤 66
7.6.2 定义客户端 67
7.6.1 发布目标 67
7.6.3 定义接收消息的客户端 71
7.6.4 启动消息服务器 72
7.6.5 编译并启动客户端 73
7.7 发布/订阅应用程序的开发步骤 74
7.7.1 发布主题 75
7.7.2 定义发布者客户端 75
7.7.3 定义订阅者客户端 76
7.7.4 启动消息服务器 77
7.7.5 编译并启动客户端 77
7.8 其他的JMS特性 78
7.8.1 指定消息的持久性 78
7.8.2 设置消息优先级 78
7.8.3 定义消息持续的时间 78
7.9 小结 79
7.8.7 事务 79
7.8.5 主题消息选择器 79
7.8.4 持久订阅 79
7.8.6 客户端验证 79
7.10 在线参考文献 80
第8章 Java、IDL和ORB 81
8.1 引言 81
8.2 CORBA 81
8.3 Java IDL 82
8.3.1 Java ORB 83
8.3.2 Java命名服务器 83
8.3.3 将IDL转化成Java 83
8.3.4 实现服务器 85
8.3.5 实现客户端 87
8.3.6 编译服务器和客户端 88
8.3.8 Java IDL和RMI 89
8.4 在线参考文献 89
8.3.7 运行应用程序 89
第9章 Java数据库连接 90
9.1 引言 90
9.2 什么是JDBC 90
9.3 驱动程序提供的内容 92
9.4 注册驱动程序 92
9.5 打开连接 93
9.6 从数据库中获取数据 94
9.7 创建表 95
9.8 applet和数据库 97
9.9 以批处理方式更新 97
9.10 可滚动和可更新的ResultSet 98
9.11 可更新的ResultSet 101
9.12 JDBC数据源 103
9.13 连接池 105
9.14 RowSet对象 106
9.15.1 DatabaseMetaData 109
9.15 JDBC元数据 109
9.15.2 ResultSetMetaData 110
9.16 在线参考文献 111
9.17 参考文献 111
第10章 XML和Java 112
10.1 引言 112
10.2 XML介绍 112
10.2.1 什么是XML 112
10.2.2 XML文档 113
10.2.3 XML词汇表 115
10.2.4 使用DTD 116
10.3 XSL转换 119
10.4 处理XML 121
10.5 JAXP API 121
10.6 SAX API 122
10.7 DOM API 128
10.8 载入XML文档 131
10.9 在Java中创建XML文档 135
10.10 在JAX中使用XSLT 137
第11章 JavaMail API:Mail在其中 141
11.1 引言 141
11.2 JavaMail API 141
11.3 安装JavaMail 142
11.4 发送Email 142
11.5 接收消息 146
11.6 回复消息 148
11.7 多部分的MIME消息 150
11.8 把原始文本加入回复邮件 151
11.9 邮件转发 152
11.10 发送附件 153
11.11 发送HTML 156
11.13 在线参考文献 157
11.12 小结 157
第Ⅱ部分 EJB体系结构 158
第12章 EJB体系结构 158
12.1 引言 158
12.2 EJB服务器的组成元素 159
12.3 EJB组件的组成元素 160
12.3.1 本地接口和远程接口 161
12.3.2 在“坚果壳”(指容器)中开发和部署EJB组件的过程 162
12.3.3 EJB组件类和接口 163
12.4 从应用程序客户机访问EJB 166
12.5 参考文献 167
第13章 无状态会话EJB 168
13.1 引言 168
13.2 无状态会话EJB的生命周期 168
13.3 无状态会话EJB的开发过程 171
13.4 业务逻辑接口 172
13.5 生命周期接口 173
13.6 组件类 174
13.6.1 Session Context对象 175
13.6.2 为什么组件类不“实现”业务或生命周期接口 176
13.7 部署描述符文件 177
13.7.1 ejb-jar.xml文件 177
13.7.2 JBoss中的jboss.xml文件 179
13.8 部署EJB组件 180
13.9 从Java应用程序客户机访问EJB 180
第14章 实体EJB:如何实现容器管理的实体EJB 184
14.1 引言 184
14.2 实体EJB生命周期 185
14.3 开发实体EJB的过程 188
14.4 业务逻辑接口 189
14.5 生命周期接口 191
14.5.1 Creator方法 192
14.5.2 find方法 193
14.5.3 Home方法 193
14.5.4 Select方法 193
14.6 主键和主键类 194
14.7 组件类 197
14.8 部署描述符文件 202
14.8.1 ejb-jarxml文件 202
14.8.2 JBoss jboss.xml文件 204
14.8.3 JBoss jbosscmp-jdbc.xml文件 204
14.9 EJB查询语言 206
14.9.1 查询语言语句 206
14.9.2 <query>部署描述符 208
14.10 从Java应用程序客户机中访问EJB 209
14.11 容器管理关联 211
14.11.1 在组件类中声明容器管理关联 212
14.11.2 关联部署描述符 215
14.11.3 Jboss jbosscmp-jdbc.xml文件 217
14.12 参考文献 219
第15章 集成EJB 220
15.1 引言 220
15.2 BookStore EJB间的交互 220
15.3 环境命名上下文(ENC) 227
15.4 集成EJB时需要考虑的一些设计问题 231
15.4.1 作为界面的会话EJB 231
15.4.2 在EJB 中使用JNDI 232
15.4.3 不用实体EJB的时候 232
15.4.4 组件类和业务逻辑接口一致性的编译期检查 234
15.4.5 通过使用bulk accessor/updator方法提高性能 235
15.5 Cart EJB程序清单 236
15.6 计时器服务 245
16.2 消息驱动EJB的生命周期 248
16.1 引言 248
第16章 消息驱动的EJB 248
16.3 组件类 249
16.4 部署描述符文件 253
16.4.1 ejb-jar.xml文件 253
16.4.2 ejb-jar.xml文件(EJB 2.1) 255
16.4.3 JBoss的jboss.xml文件 257
16.4.4 JBoss的jboss-destinations-service.xml文件 258
16.4.5 连接到JMS主题的DebugMonitor 258
16.5 从其他的EJB访问MDB 263
第Ⅲ部分 Servlets和JSP 274
第17章 Java Web应用 274
17.1 引言 274
17.2 什么是Servlet 274
17.3 Web应用 274
17.4 Web应用的结构 275
17.5 Servlet的工作原理 276
17.6 为什么使用servlet 277
17.7 Servlet API的结构 278
17.8 开发和部署Web应用的步骤 278
17.9 启动Tomcat 283
17.10 第二个serlvet示例 284
17.11 选择doGet还是doPost 287
17.12 Tomcat 288
17.13 小结 288
17.14 在线参考文献 288
17.15 参考文献 289
第18章 会话管理和生命周期监控 290
18.1 引言 290
18.2 会话管理 290
18.3 会话跟踪 292
18.3.3 安全套接字层会话 293
18.3.1 URL重写 293
18.3.2 隐藏字段 293
18.3.4 Cookies 294
18.3.5 选择会话跟踪的方法 294
18.4 会话示例 294
18.5 更多的会话细节 296
18.6 会话状态 297
18.7 会话生命周期监控 302
18.8 servlet上下文 302
18.9 ServletContext示例 304
18.10 servlet生命周期事件 307
18.11 参考文献 309
第19章 JSP 310
19.1 引言 310
19.2 什么是JSP 310
19.3 简单的JSP 312
19.4 JSP的组件 313
19.4.1 指令 313
19.4.2 动作 314
19.4.3 隐式对象 314
19.4.4 JSP脚本 314
19.5 使JSP具有交互性 315
19.6 为什么使用JSP 317
19.7 JSP的问题 318
第20章 JSP标记和隐式对象 320
20.1 引言 320
20.2 JSP标记 320
20.2.1 JSP指令 320
20.2.2 脚本元素 322
20.2.3 动作 325
20.4 作用域 327
20.3 隐式对象 327
第21章 JSP标记库 330
21.1 引言 330
21.1 为什么使用标记库 330
21.3 关键概念 331
21.4 创建定制标记 332
21.5 Tag接口 332
21.6 创建标记库 334
21.6.1 实现标记处理程序类 334
21.6.2 定义标记库描述符 335
21.6.3 映射标记库 336
21.6.4 导入标记库 337
21.6.5 运行Web应用 337
21.7 为标记添加特性 338
21.8 包含正文内容 340
21.10 引入脚本变量 344
21.9 开发标记库的原则 344
21.11 嵌套标记 345
21.12 标记验证 345
21.13 处理标记异常 346
21.14 JSTL 347
21.15 小结 349
21.16 在线参考文献 349
第22章 请求调度 350
22.1 引言 350
22.2 Servlet Chaining 350
22.3 请求调度 351
22.4 获取RequestDispatcher 352
22.4.1 转发请求 354
22.4.2 转发的示例 354
22.4.3 通过请求调度实现包含 359
23.2 什么是过滤器 362
23.1 引言 362
第23章 过滤 362
23.3 过滤器能做些什么 363
23.4 过滤器API 364
23.5 实现一个简单的过滤器 366
23.6 日志过滤器示例 370
23.7 包装请求和响应对象 372
23.8 过滤XML来生成HTML 373
第24章 Web应用程序安全化 380
24.1 引言 380
24.2 传统的方法 380
24.2.1 使用Web服务器 380
24.2.2 DIY 381
24.3 容器管理的安全性 382
24.3.1 定义用户 383
24.3.2 配置对Web资源的访问 384
24.3.3 身份验证的4种类型 385
24.4 程序化的安全性 389
24.5 配置JSP文件 391
24.5.1 启用或禁用EL评估 391
24.5.2 启用或禁用脚本 391
24.5.3 页面编码的声明 392
24.5.4 定义隐式包含 392
24.6 小结 393
24.7 在线参考文献 393
第25章 部署配置 394
25.1 引言 394
25.2 上下文初始化 394
25.3 servlet初始化 395
25.4 servlet加载 396
25.5 会话配置 396
25.7 错误页面 397
25.6 欢迎页面 397
25.9 分布式应用程序 399
25.8 MIME映射 399
25.10 J2EE 1.3中的部署描述符 400
25.11 在J2SE 1.4中部署J2EE应用程序 401
第26章 从Servlet/JSP中访问EJB 404
26.1 引言 404
26.2 EJB的客户端访问 404
26.3 从Web应用程序访问EJB 405
26.3.1 Web归档 405
26.3.2 企业级归档 407
26.4 缓存EJB引用 408
26.5 示例 409
26.6 小结 413
27.1 引言 414
27.2 事务的概念 414
第27章 部署要点:事务 414
第Ⅳ部分 其他技术 414
27.3 EJB服务器支持的事务类型 417
27.4 容器管理的事务 417
27.4.1 Required特性 418
27.4.2 NotSupported特性 418
27.4.3 Supports特性 419
27.4.4 RequiresNew特性 419
27.4.5 Mandatory特性 420
27.4.6 Never特性 420
27.4.7 事务部署描述符 420
27.5 Bean管理的事务 422
27.5.1 User-Transaction接口 423
27.5.2 UserTransaction对象的获取和使用 424
27.6 事务隔离等级 425
27.6.1 锁模式 428
27.7 事务及异常事件 429
27.8 参考文献 429
27.6.2 指定隔离等级 429
第28章 部署要点:安全性 430
28.1 引言 430
28.2 安全概念和体系结构 430
28.2.1 身份验证 432
28.2.2 访问控制(授权) 433
28.3 EJB容器管理的安全性 433
28.3.1 声明的安全性 433
28.3.2 程序化安全性 437
28.3.3 利益相关者的责任 438
28.4 Java身份验证和授权服务(JAAS)的使用实例 438
28.5 参考文献 443
29.2 再谈实体EJB生命周期 444
第29章 Bean管理的持久性 444
29.1 引言 444
29.3 Bookltem EJB:BMP版 445
29.4 部署描述符文件 456
29.5 从客户端访问BookItem BMP实体 458
第30章 有状态会话EJB 459
30.1 引言 459
30.2 有状态会话EJB的生命周期 460
30.3 实现类中可容许的实例变量的规则 461
30.4 有状态会话EJB的开发过程 461
30.4.1 Purchase EJB的业务逻辑接口 462
30.4.2 Purchase EJB的生命周期接口 463
30.4.3 Purchase EJB组件类 463
30.5 使用SessionSynchronization接口的事务同步化 468
30.6 部署描述符文件 469
31.1 引言 470
第31章 J2EE连接器体系结构 470
31.2 体系结构概述 471
31.3 连接服务 472
31.4 事务服务 473
31.5 安全服务 474
31.6 通用客户端接口(CCI) 475
31.7 部署资源适配器 479
31.8 参考文献 480
第32章 从Java到SVG 481
32.1 引言 481
32.2 SVG的概念 481
32.2.1 SVG的优点 481
32.2.2 SVG的缺点 482
32.3.3 获得SVG查看器 482
32.2.4 SVG的形式 482
32.3.1 使用DOM API 483
32.3 使用Java创建SVG 483
32.3.2 将XML转换成SVG 485
32.4 Batik的使用 487
32.4.1 SVG查看器 487
32.4.2 SVG光栅器 487
32.4.3 SVG生成器:从Java图形生成SVG内容 487
32.4.4 SwingDraw程序 489
32.5 Servlet和JSP 490
32.6 小结 491
32.7 在线参考文献 491
32.8 附录:SVGCreator.java 491
第33章 Web服务 494
33.1 引言 494
33.2 Web服务的概念 494
32.2.1 SOAP的概念 494
33.2.3 WSDL的概念 496
33.2.2 带附件的SOAP 496
33.2.4 UDDI的概念 498
33.3 Axis的概念 498
33.4 基于Axis Web服务的客户端 498
33.5 创建简单的Web服务驱动程序 502
33.5.1 为Web服务设置Tomcat 502
33.5.2 创建简单的Web服务 502
33.5.3 配置Web服务 504
33.5.4 WSDL的作用 506
33.6 Java Web服务开发包 509
33.7 Java的带附件SOAP API 510
33.8 Web服务和J2EE 510
33.9 小结 513
33.10 参考文献 514
34.1 引言 515
第34章 J2EE模式 515
第Ⅴ部分 设计 515
34.2 模式背后的动机 516
34.3 设计模式 517
34.3.1 什么是设计模式 517
34.3.2 设计模式不是什么 517
34.3.3 体系结构模式 517
34.3.4 归类模式 518
34.3.5 何时使用模式 519
34.3.6 设计模式的优点及限制 519
34.4 什么是J2EE设计模式 519
34.5 J2EE模式目录 520
34.6 FrontController模式 521
34.6.1 上下文 521
34.6.2 问题 521
34.6.3 强制性 521
34.6.4 解决方案 522
34.6.6 结果 523
34.6.7 相关模式 523
34.7 请求-事件-调度程序模式 523
34.7.1 上下文 523
34.6.5 策略 523
34.7.2 问题 524
34.7.3 强制性 524
34.7.4 解决方案 524
34.7.5 策略 525
34.7.6 结果 527
34.8.2 问题 528
34.8.4 解决方案 528
34.8.3 强制性 528
34.8.1 上下文 528
34.8 基于J2EE的模型-视图-控制器 528
34.7.7 相关模式 528
34.8.5 策略 530
34.8.6 结果 531
34.8.7 相关模式 531
34.9 小结 531
34.10 进阶阅读材料 531
34.11 参考文献 532
第35章 故障跟踪J2EE案例研究 533
35.1 引言 533
35.2 故障跟踪应用 533
35.2.1 变更请求 533
35.2.2 问题报告 535
35.3 使用故障跟踪系统 536
35.4 故障跟踪系统的设计 539
35.5 小结和结论 546