第1章 Java. 分布式计算和J2EE 1
1.1 Java背景知识 4
1.1.1 应用开发的各项能力 4
1.1.2 Java是应用开发的粘合剂 5
1.2 公司必须为网络经济进行改造 6
1.2.1 公司日益需要Internet来参与竞争 6
1.2.2 企业应用开发的挑战 7
1.3 Web结构的要求 9
1.3.1 速度的比较 9
1.3.2 服务有效性 10
1.3.3 连接到现有数据 10
1.3.4 扩展的用户概念:客户. 职员和
合伙人 10
1.3.5 灵活的用户交互 10
1.3.6 灵活的事务组件模型 11
1.4 Web应用的生存周期 11
1.4.1 多个开发人员角色 11
1.4.2 迭代式开发 12
1.4.3 简化的结构和开发 13
1.4.4 方便地映射到应用功能 13
1.4.5 基于组件的结构 14
1.4.6 对客户端组件的支持 14
1.4.7 对事务逻辑组件的支持 15
1.5 J2EE API和认证 16
1.5.1 Java 2 平台企业版规范 17
1.5.2 J2EE兼容性测试套件 17
1.5.3 J2EE中的Sun BluePrints设计指南 18
1.5.4 将来的企业标准 18
1.6 XML和J2EE 18
1.6.1 为什么使用XML 19
1.6.2 电子数据交换和电子商务 19
1.6.3 电子数据交换 20
1.6.4 企业应用集成 20
1.6.5 软件开发和XML 20
1.6.6 XML技术和Java平台 21
1.6.7 Java 平台的XML技术标准扩展 21
1.7 J2EE应用的打包 22
1.8 本书研究的应用范例 22
1.9 小结 23
第2章 J2EE应用设计和开发 24
2.1 J2EE层次 24
2.1.1 客户层 25
2.1.2 表示层 25
2.1.3 业务逻辑层 25
2.1.4 数据层 26
2.2 J2EE应用组件 26
2.2.1 客户组件 26
2.2.2 Web组件 28
2.2.3 业务组件 28
2.3 J2EE结构 29
2.3.1 容器和服务 29
2.3.2 容器类型 30
2.4 开发的方法和过程 30
2.4.1 建模工具 31
2.4.2 开发工具 31
2.4.3 J2EE应用的内容 32
2.4.4 J2EE应用的开发阶段 33
2.5 范例应用程序简介 38
2.6 小结 38
第3章 设计J2EE应用 39
3.1 建模工具的历史 39
3.2 概况 39
3.3 设计应用 39
3.3.1 为什么创建模型 40
3.3.2 实体关系基础 41
3.3.3 CASE工具 43
3.3.4 逆向工程 44
3.3.5 实体建模 46
3.3.6 关系建模 47
3.3.7 支持的数据库 49
3.4 为Web应用建模 49
3.5 系统建模 51
3.6 统一建模语言 52
3.6.1 UML的目标和原则 53
3.6.2 规范和术语 53
3.7 为Web页面建模 56
3.7.1 表单 59
3.7.2 框架 59
3.8 EJB UML映射 59
3.8.1 Java社团应该遵循规范 60
3.8.2 将要开发的规范, 以及它如何满足
当前的需求 60
3.9 工具支持 61
3.10 小结 61
第4章 构建J2EE应用程序的任务列表 62
4.1 完成前提任务 62
4.1.1 后勤前提条件 62
4.1.2 物理前提条件 64
4.2 设计数据库 65
4.2.1 确定应用实体 65
4.2.2 提炼每个实体和属性 66
4.2.3 确定关系 66
4.3 创建表和列 66
4.3.1 选择数据类型 67
4.3.2 创建关键字 68
4.3.3 完成数据库物理设计 68
4.3.4 估计数据库大小 69
4.3.5 建立数据库开发环境 69
4.4 定义应用程序 70
4.5 创建后端接口 71
4.5.1 初始数据的加载 71
4.5.2 创建EJB类和数据库存储过程 72
4.5.3 数据库调整和修复的批处理工具 72
4.5.4 备份和恢复的批处理工具 72
4.6 创建界面 72
4.6.1 选择应用的用户界面风格 73
4.6.2 为界面风格设置TAGLIB类库 73
4.7 构建页面 74
4.7.1 确定页面类型 74
4.7.2 为页面或子页面添加控件 75
4.7.3 设计菜单交互动作 76
4.8 创建数据访问对象 76
4.9 验证代码 76
4.9.1 决定使用调试器的时机 76
4.9.2 选择断点代码 77
4.10 提炼代码 77
4.11 创建可执行程序 77
4.12 小结 78
第5章 建立资源访问:JNDI和LDAP 79
5.1 命名和目录服务 79
5.2 什么是JNDI 79
5.3 寻找应用范例资源 80
5.3.1 JNDI的好处 80
5.3.2 JNDI和J2EE 80
5.3.3 JNDI服务提供者 81
5.4 JNDI结构 82
5.4.1 JNDI程序包 83
5.4.2 命名 83
5.4.3 上下文 83
5.4.4 命名空间 84
5.5 JNDI操作 85
5.6 轻型目录访问协议 85
5.7 JNDI/LDAP实用范例 86
5.8 小结 88
第6章 建立数据访问:JDBC 89
6.1 介绍 89
6.1.1 什么是JDBC 90
6.1.2 JDBC的好处 90
6.2 JDBC结构:API和驱动 91
6.3 JDBC API 93
6.4 获得和更新数据 97
6.4.1 语句 97
6.4.2 ResultSet 100
6.5 SQL-to-Java 数据类型 101
6.5.1 处理Null 102
6.5.2 存储过程 102
6.6 JDBC异常类型 103
6.6.1 SQLException 103
6.6.2 SQLWarning 104
6.6.3 DataTruncation警告 104
6.7 元数据 104
6.7.1 ResultSetMetaData对象 104
6.7.2 DatabaseMetaData接口 105
6.8 可滚动的结果集 105
6.8.1 可滚动结果集方法 106
6.8.2 可滚动结果集范例 106
6.8.3 可更新结果集 107
6.8.4 创建可更新结果集 107
6.9 更新行 107
6.9.1 删除行 108
6.9.2 插入行 108
6.10 事务支持 109
6.11 批处理语句 109
6.12 JDBC 2.1新数据类型 111
6.12.1 BLOB和CLOB 111
6.12.2 ARRAY 112
6.12.3 STRUCT 113
6.12.4 REF 113
6.13 JDBC 2.0可选程序包API:javax.sql 113
6.13.1 使用JNDI进行数据库访问 113
6.13.2 连接池 114
6.13.3 分布式事务 115
6.13.4 JDBC RowSets 115
6.14 范例研究:SilverStream应用服务器 115
6.14.1 SilverStream的数据库连接 115
6.14.2 SilverStream内部的JDBC 116
6.14.3 从SilverStream数据库中的会话bean
访问JDBC 117
6.14.4 从会话bean访问JDBC 118
6.14.5 在会话bean中定义资源引用查找 118
6.14.6 建立JDBC调用 118
6.14.7 建立连接 119
6.14.8 建立. 编译和执行SQL Select
语句 119
6.14.9 创建环境入口 120
6.14.10 把资源引用映射为SilverStream
数据库 120
6.15 小结 121
第7章 建立控制流:servlet 122
7.1 什么是servlet 122
7.1.1 第一代—CGI 123
7.1.2 第二代—ISAPI/NSAPI 123
7.1.3 Java替代品—servlet 124
7.2 servlet的优点 124
7.3 在MVC和应用范例中用做控制器 124
7.4 基本HTTP 125
7.5 servlet容器 127
7.6 Servlet API 127
7.7 服务方法细节 128
7.7.1 把数据传递给客户端 128
7.7.2 设置MIME类型 129
7.8 HTML客户 130
7.8.1 表单 130
7.8.2 经常使用的标签属性 130
7.9 servlet生命周期 132
7.9.1 初始化 133
7.9.2 服务 133
7.9.3 销毁 133
7.10 ServletContext 134
7.11 HTTP请求报头 134
7.11.1 参数 134
7.11.2 内容 134
7.11.3 连接 135
7.11.4 Cookie 137
7.11.5 报头 137
7.12 HTTP响应报头 140
7.13 会话管理 141
7.13.1 隐藏表单字段 141
7.13.2 改写URL 142
7.13.3 持久Cookie 142
7.13.4 会话跟踪API 144
7.14 发送请求 145
7.15 使用JDBC的servlet 146
7.16 Web应用 149
7.16.1 Web存档 149
7.16.2 目录结构 149
7.16.3 部署描述符/映射到servlet的请求 150
7.16.4 Multi-MIME类型 152
7.17 在SilverStream应用服务器中使用
servlet 152
7.18 Servlet 2.3 API 157
7.19 小结 157
第8章 Java服务器页面:介绍 158
8.1 JSP页面的特性 160
8.1.1 服务器端Java资源的高效利用 160
8.1.2 Web开发. 部署和维护 160
8.1.3 可重用的组件 161
8.1.4 分离业务逻辑和表示 161
8.1.5 大型开发团体和广泛的支持 161
8.1.6 平台无关性 161
8.1.7 使用标签的下一代页面开发 161
8.2 JSP页面的各个组成部分 161
8.2.1 JSP指令 162
8.2.2 JSP标签 162
8.2.3 脚本元素 163
8.3 开发和部署JSP页面 163
8.3.1 编写JSP页面 163
8.3.2 JSP 1.1页面范例 166
8.4 JSP结构 169
8.4.1 简单的应用 169
8.4.2 成熟的结构:重定向请求 172
8.4.3 模型-视图-控制器设计 175
8.5 结论:JSP页面是企业Java解决方案中很
重要的组成部分 179
8.5.1 JSP页面:超越servlet的优势 180
8.5.2 处理现有的servlet 180
第9章 Java服务器页面:使用标签库进行
实际开发 181
9.1 JSP语法 181
9.1.1 JSP注释 181
9.1.2 HTML注释 181
9.1.3 隐藏注释 182
9.1.4 JSP指令 182
9.1.5 JSP脚本元素 187
9.1.6 JSP动作 188
9.1.7 对象作用域 198
9.1.8 隐含对象 198
9.1.9 错误处理 199
9.2 标签库 199
9.2.1 声明标签库 199
9.2.2 标签处理器 200
9.2.3 创建公司横幅定制标签 202
9.3 小结 204
第10章 为应用构建用户界面 205
10.1 模型-视图-控制器示例 205
10.1.1 优势 206
10.1.2 缺点 207
10.2 Struts框架 207
10.2.1 安装Struts 207
10.2.2 必备软件 208
10.2.3 Struts框架概括 208
10.2.4 JavaBeans和作用域 213
10.2.5 构建模型组件 214
10.2.6 构建视图组件 215
10.2.7 构建控制器组件 223
10.2.8 访问关系数据库 230
10.3 小结 233
第11章 企业JavaBeans:介绍 234
11.1 企业JavaBeans概述 234
11.2 分布式程序设计概括 236
11.3 EJB框架 236
11.4 会话和实体bean 238
11.4.1 会话bean 238
11.4.2 实体bean 238
11.4.3 使用会话bean封装实体bean 239
11.4.4 bean相关性 239
11.5 bean的属性 239
11.5.1 无状态bean 239
11.5.2 有状态bean 240
11.6 bean的各个组成部分 240
11.6.1 Home接口 240
11.6.2 EJBObject接口 240
11.6.3 部署描述符 240
11.6.4 SessionContext和EntityContext
对象 241
11.6.5 相关和细粒度对象 241
11.7 容器管理持久性和bean管理持久性 241
11.7.1 容器管理持久性 241
11.7.2 bean管理持久性 242
11.8 企业JavaBeans的生命周期 242
11.9 Java消息服务和消息驱动bean 243
11.9.1 Java消息服务 243
11.9.2 消息驱动bean 244
11.10 分布式程序设计服务 246
11.10.1 命名和注册 246
11.10.2 远程方法调用 246
11.10.3 协议 246
11.11 公共对象请求代理体系结构和远程
方法调用 246
11.11.1 CORBA 247
11.11.2 Java/RMI 247
11.12 事务和事务管理 248
11.12.1 分布式事务 248
11.12.2 多事务 249
11.12.3 Java事务服务 249
11.12.4 Java事务API 249
11.12.5 实体bean方法和事务属性 249
11.12.6 会话bean方法和事务属性 249
11.13 安全性 250
11.14 部署 250
11.14.1 部署描述符 250
11.14.2 程序包层次图 250
11.15 EJB开发中的个人角色 251
11.15.1 实体bean开发人员 251
11.15.2 bean编写人员 251
11.15.3 应用组装人员 252
11.15.4 bean部署人员 252
11.16 合作角色 252
11.16.1 组件提供者 252
11.16.2 应用服务器提供者 252
11.16.3 EJB容器提供者 253
11.17 小结 253
第12章 企业JavaBeans:构建会话bean 254
12.1 创建会话bean 254
12.1.1 无状态和有状态会话bean 254
12.1.2 定义会话bean类 255
12.1.3 会话bean和继承 255
12.1.4 会话bean接口 255
12.1.5 会话bean类方法 260
12.1.6 范例会话bean组件代码 261
12.1.7 存根. 层次和对象范例代码 267
12.2 打包和部署会话bean 294
12.2.1 JAR内容 294
12.2.2 部署 296
12.3 修改bean代码 296
12.4 从客户端查找会话bean 296
12.4.1 InitialContext 296
12.4.2 类型限制 297
12.4.3 查找对象和接口:Java命名和目录
接口 297
12.4.4 使用EJBHome创建实例 298
12.5 从客户端调用会话bean 298
12.5.1 为调用EJB编写客户端 298
12.5.2 不同类型的客户端 298
12.6 小结 300
第13章 企业JavaBeans:构建实体bean 301
13.1 定义实体bean 301
13.1.1 实体bean的用途 302
13.1.2 实体bean生命周期状态 302
13.2 容器和bean管理持久性 303
13.2.1 bean管理持久性 304
13.2.2 容器管理持久性 304
13.3 CMP实体bean的剖析 305
13.3.1 bean编写人员创建的组件 305
13.3.2 容器创建的对象 307
13.4 开发实体bean 308
13.4.1 第一步—向数据库安装数据源 308
13.4.2 第二步—开发主关键字类 309
13.4.3 第三步—开发实体bean类 309
13.4.4 第四步—定义主接口或本地主
接口 312
13.4.5 第五步—定义本地或远程接口 312
13.4.6 第六步—定义部署描述符 313
13.4.7 第七步—使用容器提供的工具
进行部署 314
13.4.8 第八步—创建客户端应用程序 314
13.5 深入了解实体bean的开发 314
13.5.1 主关键字 315
13.5.2 映射到单独的字段 315
13.5.3 EntityBean类和生命周期事件方法 316
13.5.4 主接口和create()方法 318
13.5.5 主接口和finder()方法 319
13.5.6 主接口和remove()方法 320
13.5.7 主接口和getEJBMetaData()方法 320
13.5.8 远程接口 320
13.5.9 本地接口 320
13.6 EJB客户端 321
13.6.1 远程客户端 321
13.6.2 本地客户端 322
13.7 使用GUI工具配置. 打包和部署实体
bean 322
13.7.1 集成. 设置和打包实体bean 322
13.7.2 部署实体bean Jar文件 326
13.8 小结 326
第14章 使用电子邮件传递信息:
JavaMail 327
14.1 一般的电子邮件通信 327
14.2 JavaMail的任务 328
14.3 提供者注册表 329
14.4 JavaMail结构和主要的类 330
14.4.1 Java活动框架 331
14.4.2 javax.mail.Session 331
14.4.3 javax.mail.Store 332
14.4.4 javax.mail.Folder 333
14.4.5 javax.mail.search 334
14.4.6 javax.mail.Address 336
14.4.7 javax.mail.internet.InternetAddress 336
14.4.8 javax.mail.Message 336
14.4.9 javax.mail.internet.MimeMessage 337
14.4.10 javax.mail.Transport 341
14.5 发送和接收消息 341
14.5.1 发送因特网消息 341
14.5.2 接收因特网消息 342
14.5.3 处理多部分消息 343
14.5.4 发送MimeMultipart消息 343
14.5.5 接收MimeMultipart消息 344
14.5.6 发送消息中的二进制数据 345
14.5.7 接收消息中的二进制数据 347
14.6 在Java服务器页面中使用JavaMail 348
14.6.1 简要指令 349
14.6.2 详细指令 352
14.6.3 代码解决方案 357
14.7 小结 359
第15章 应用间的消息通信:Java消息
服务 360
15.1 消息通信基础 360
15.1.1 消息 360
15.1.2 中间件 360
15.1.3 面向消息的中间件 361
15.1.4 通信模式 361
15.2 JMS的位置 362
15.2.1 应用中的JMS 362
15.2.2 JMS中的消息模型 363
15.2.3 处理异常 364
15.2.4 会话管理 365
15.2.5 消息 365
15.3 JMS组件 367
15.3.1 管理对象 367
15.3.2 接口类 367
15.4 生成和销毁消息 368
15.4.1 MessageProducer 368
15.4.2 MessageConsumer 368
15.4.3 MessageListener 369
15.4.4 MessageSelector 369
15.5 JMS范例 369
15.5.1 简单的点对点范例 369
15.5.2 简单的发布/订阅范例 372
15.5.3 点对点浏览范例 375
15.5.4 MessageListener范例 378
15.5.5 MessageSelector范例 382
15.5.6 队列和主题目的地维护范例 386
15.6 JMS实现和部署问题 390
15.6.1 还有其他什么需要实现的部分 390
15.6.2 部署 390
15.7 小结 391
第16章 使用XML进行数据交换 392
16.1 什么是XML 392
16.2 XML文档的结构 394
16.2.1 序言 394
16.2.2 实例部分 394
16.2.3 元素 394
16.2.4 标签 395
16.2.5 空元素 395
16.2.6 属性 395
16.2.7 实体 396
16.2.8 转义字符 397
16.3 未解析的数据 398
16.3.1 注释 398
16.3.2 CDATA 398
16.4 处理指令 399
16.4.1 字符引用 399
16.4.2 字符范围 399
16.4.3 空格 399
16.5 文档类型定义 400
16.6 XML模式 403
16.6.1 XML模式与DTD的比较 403
16.6.2 模式约束 404
16.6.3 XML模式的特性 404
16.6.4 模式词汇 405
16.6.5 模式范例 405
16.6.6 模式的未来 410
16.7 XML解析器 410
16.8 文档对象模型 411
16.8.1 DOM结构模型 411
16.8.2 内存管理 412
16.8.3 命名规范 413
16.8.4 DOM对象 413
16.9 XML简单API 413
16.10 XML输出 416
16.11 XSL 417
16.11.1 XSL转换 417
16.11.2 XSL格式对象 418
16.11.3 XML路径语言 418
16.11.4 XSLT命名空间 418
16.12 样式表结构 419
16.12.1 stylesheet元素 419
16.12.2 模板元素 422
16.13 应用样式表 422
16.14 XML链接语言 422
16.15 XML安全 424
16.15.1 XML关键管理规范 424
16.15.2 安全评估标记语言 424
16.15.3 XKMS和SAML的关系 424
16.16 小结 425
第17章 验证应用 426
17.1 Java和测试 426
17.2 用调试进行质量控制 428
17.3 调试技术 429
17.3.1 不靠主观判断进行测试 429
17.3.2 散散心, 然后重新部署 429
17.3.3 如何使调试工作更加科学 429
17.3.4 语法错误 432
17.4 校正错误 432
17.4.1 改善可靠性 433
17.4.2 优秀调试器的重要性 434
17.5 测试和开发阶段 434
17.5.1 Alpha阶段 435
17.5.2 Beta阶段 435
17.5.3 FCS 435
17.6 测试方法和技术 436
17.6.1 单元测试 436
17.6.2 压力测试和海量数据生成 436
17.6.3 代码复杂性分析 436
17.6.4 基准/性能测试 436
17.6.5 稳定性测试 436
17.6.6 衰减测试 436
17.6.7 黑盒测试 436
17.6.8 白盒测试 436
17.6.9 可用性测试 436
17.6.10 跨平台测试 437
17.6.11 安全性测试 437
17.6.12 安装测试 437
17.6.13 中断测试 437
17.6.14 并行处理 437
17.6.15 测试覆盖分析 437
17.7 Web站点测试工具和站点管理工具 437
17.7.1 负载和性能测试工具 438
17.7.2 Java测试工具 445
17.7.3 链接检查工具 445
17.7.4 HTML确认器 446
17.7.5 Web功能/衰减测试工具 447
17.7.6 Web站点安全性测试工具 448
17.7.7 外部站点监控服务 449
17.7.8 Web站点管理工具 449
17.7.9 其他Web测试工具 450
17.8 小结 450
第18章 执行应用 452
18.1 概述 452
18.2 编写高性能应用 453
18.2.1 规模因素 453
18.2.2 性能规模 453
18.2.3 组件设计 454
18.2.4 环境因素 455
18.2.5 缩小网络流量 455
18.2.6 编码指南 455
18.2.7 池管理 456
18.2.8 J2EE组件性能 459
18.2.9 设计和性能 460
18.3 调整性能的准备工作 461
18.3.1 范围. 目标和方法 461
18.3.2 负载测试 461
18.3.3 Profiler 462
18.4 诊断和解决问题指南 463
18.4.1 容易解决的问题 463
18.4.2 配置策略 463
18.4.3 改善applet下载速度 464
18.4.4 把图像打包成一个类文件 464
18.4.5 使用JAR文件 464
18.4.6 线程池 464
18.5 影响服务器性能的因素 465
18.5.1 中央处理单元 465
18.5.2 易失存储(内存) 465
18.5.3 永久存储(磁盘) 465
18.5.4 数据库性能 465
18.6 数据库监控和调整工具 467
18.6.1 ShowPlan(SQL Server)和Explain
Plan(Oracle) 467
18.6.2 INDEX调整向导 467
18.6.3 Oracle调整包 467
18.6.4 Oracle SQL_TRACE 467
18.6.5 Optimizeit 467
18.7 小结 467
第19章 部署应用 469
19.1 Java的“编写一次, 随处运行”承诺 469
19.2 组装过程 469
19.2.1 组装概述 469
19.2.2 组装应用和组件 470
19.3 部署过程 482
19.3.1 使用J2EE引用实现进行部署 482
19.3.2 使用SilverStream应用服务器进行
部署 486
19.3.3 使用BEA WebLogic服务器进行
部署 491
19.4 小结 518
附录A 示例应用的文档 519
附录B 相关工具 531
附录C 快速参考资料 564