第1章 绪论 1
第1节 概述 1
1.1.1 J2EE技术 1
1.1.2 J2EE平台的结构 3
1.1.3 J2EE平台的特点 5
1.1.4 J2EE平台的优点 7
第2节 J2EE的角色 8
第3节 J2EE应用程序的开发 9
1.3.1 J2EE应用程序的组成 10
1.3.2 J2EE应用程序的开发过程 11
第2章 J2EE快速入门 13
第1节 源程序及环境设置 13
2.1.1 Enterprise Bean的源代码 13
2.1.2 编译Enterprise Bean 15
第2节 配置Enterpnise Bean 18
2.2.1 第1步:在DOS命令行启动J2EE服务器 18
2.2.2 第2步:运行应用程序配置工具 19
2.2.3 第3步:创建一个新的J2EE应用程序 20
2.2.4 第4步:打包Enterprise Bean 20
2.2.5 第5步:指定Enterprise Bean的JNDI名 24
第3节 J2EE应用程序客户机 24
2.3.1 ConverterClient.java源程序 24
2.3.2 打包J2EE应用程序客户机 26
2.3.3 指定应用程序客户机对Enterprise Bean的引用 29
2.3.4 指定Enterprise Bean的JNDI名 29
第4节 部署J2EE应用程序 30
第5节 运行J2EE应用程序客户机 31
第6节 创建Web客户机 32
2.6.1 源程序:index.jsp 32
2.6.2 打包Web客户机 34
2.6.3 Web客户机如何引用Enterprise Bean 36
2.6.4 指定JNDI名 37
2.6.5 部署 38
2.6.6 运行Web客户机 38
第3章 JNDI与LDAP 40
第1节 命名与目录 40
3.1.1 命名的概念 40
3.1.2 目录的概念 41
第2节 JNDI基础 42
3.2.1 JNDI的结构 42
3.2.2 naming包 43
3.2.3 directory包 45
3.2.4 事件 46
第3节 LDAP编程技术 46
3.3.1 理解LDAP 47
3.3.2 在Java中使用Netscape Directory SDK 49
3.3.3 快速入门 50
3.3.4 LDAP URL 53
3.3.5 常见操作 55
第4章 JDBC编程技术 63
第1节 JDBC编程技术综述 63
4.1.1 JDBC的概念 63
4.1.2 JDBC的用途 64
4.1.3 JDBC-ODBC桥 65
4.1.4 JDBC URL 65
4.1.5 odbc子协议 66
4.1.6 事务 67
第2节 DriverManager类 67
第3节 Statement接口 68
第4节 PreparedStatement接口 70
第5节 ResultSet接口 71
第6节 JDBC编程实例:JDBCDemo.java 73
4.6.1 创建新的ODBC数据资源 73
4.6.2 ODBC编程的典型步骤 75
4.6.3 源程序:JDBCDemo.java 75
第7节 JDBC数据库连接池 79
4.7.1 原理 79
4.7.2 JDBC数据库连接池的实现 79
4.7.3 在Servlet中使用连接池 90
第5章 Servlet编程技术 93
第1节 Java Servlet概述 93
5.1.1 关于Servlet 93
5.1.2 javax.servlet API的特征 94
第2节 体会Servlet编程:一个简单的网页计数器 97
5.2.1 源程序:SimpleCountet.java 98
5.2.2 编译、打包、部署与运行 99
第3节 Servlet的相关类和接口 102
5.3.1 HttpServlet类 102
5.3.2 HttpServletRequest接口 105
5.3.3 HttpServletResponse接口 107
5.3.4 ServletConfig接口 110
5.3.5 ServletContext接口 110
5.3.6 ServletInputStream类 111
5.3.7 ServletOutputStream类 111
第4节 探查Servlet服务器的环境信息 112
5.4.1 源程序 112
5.4.2 添加Web组件、部署和运行 116
第5节 Cookie编程技术 117
5.5.1 概述 117
5.5.2 Servlet Cookie API 118
5.5.3 Cookie的常用操作 119
5.5.4 实例 119
第6节 session编程技术 122
5.6.1 HTTP状态的维护 122
5.6.2 Session API的使用 123
5.6.3 实例:ShowSession.Java 123
第6章 JSP编程技术 127
第1节 概述 127
6.1.1 什么是JSP页 127
6.1.2 Java Server Page技术的特点 128
6.1.3 JSP页的语义 129
第2节 Web应用程序及其模式 131
6.2.1 应用程序的模式 131
6.2.2 JSP技术在XML中的使用 132
6.2.3 重定向请求 133
6.2.4 包含请求 133
第3节 JSP页的标准语法和语义 134
6.3.1 一般的语法规则 134
6.3.2 错误处理 135
6.3.3 注释 135
6.3.4 转义的约定 136
6.3.5 语义概述 136
第4节 指令(directive) 137
6.4.1 page指令 137
6.4.2 include指令 139
6.4.3 taglib指令 139
第5节 隐含对象 139
6.5.1 隐含对象的类型 139
6.5.2 隐含对象与范围 140
第6节 使用脚本元素 141
6.6.1 如何增加脚本 141
6.6.2 <%,<%=和<%!之间的区别 141
第7节 标准的action 142
6.7.1 <jsp:useBean> 142
6.7.2 <jsp:setProperty> 144
6.7.3 <jsp:getProperty> 145
6.7.4 <jsp:include> 145
6.7.5 <jsp:forward> 146
6.7.6 <jsp:param> 146
6.7.7 <jsp:plugin> 146
第8节 JSP容器 147
6.8 JSP页的模式 147
6.8.2 JSP页实现类 149
6.8.3 缓冲 150
6.8.4 预编译 151
第9节 JSP技术类 151
6.9.1 JspPage接口和HttpJspPage接口 151
6.9.2 JspWriter抽象类 152
6.9.3 PageContext抽象类 154
6.9.4 JspFactory抽象类 157
第10节 实例:显示页面所提交的内容 158
6.10.1 源程序 158
6.10.2 运行结果 162
第11节 JSP中的JavaBeans 163
6.11.1 JavaBeans及其用途 164
6.11.2 创建JavaBeans 164
第7章 JSP taglib编程技术 166
第1节 taglib基础 166
7.1.1 概述 166
7.1.2 使用标记 167
7.1.3 JSP tag API 168
第2节 taglib编程快速入门 169
7.2.1 taglib的实现体系 169
7.2.2 tag handler类 170
7.2.3 实例 171
7.2.4 taglib的配置、部署与运行 174
第3节 JSP tag API及其生命周期 179
7.3.1 Tag接口及其生命周期 179
7.3.2 IterationTag接口及其生命周期 183
7.3.3 Body Tag接口及其生命周期 183
7.3.4 TagSupport类 185
7.3.5 Body TagSupport类 187
7.3.6 BodyContent类 188
7.3.7 TagData类 189
7.3.8 PageData类 190
7.3.9 TagAttributeInfo类 190
7.3.10 TagExtraInfo类 191
7.3.11 TagInfo类 191
7.3.12 TagLibraryInfo类 193
7.3.13 TagLibrary Validator类 194
7.3.14 Tag VariableInfo类 194
7.3.15 ValidationMessage类 195
7.3.16 VariableInfo类 196
第4节 在标记中使用属性 197
7.4.1 带属性的标记 197
7.4.2 实例 199
第5节 包含标记的体 204
7.5.1 含有体的标记 204
7.5.2 tag handler类 206
7.5.3 标记库描述符文件 208
7.5.4 JSP文件(HeadingTag.jsp) 209
7.5.5 运行 210
第6节 操作标记的体 211
7.6.1 简介 211
7.6.2 实例 211
第8章 EJB概述 215
第1节 简介 215
8.1.1 Enterprise JavaBean的起源 215
8.1.2 Enterprise JavaBean的特点 217
8.1.3 Enterprise JavaBean的角色 217
8.1.4 Java Beans组件和Enterprise JavaBeans 219
8.1.5 Enterprise JavaBeans编程的限制 219
8.1.6 场景:开发,装配和部署 219
第2节 Enterprise JavaBean基础 220
8.2.1 作为组件的Enterprise JavaBean 220
8.2.2 Enterprise JavaBean的约定 220
8.2.3 Session和Entity对象 222
8.2.4 标准的CORBA映射 223
8.2.5 Enterprise JavaBeans对session状态的维护 224
8.2.6 Helper对象 224
第3节 J2EE应用程序的设计思想 225
8.3.1 概述 225
8.3.2 选择系统结构 226
8.3.3 应用程序对象 226
8.3.4 数据访问对象 227
8.3.5 值对象 228
8.3.6 Session Beans作为Entity Beans的前台 229
第9章 Session Bean 230
第1节 Stateful Session Beans实例 230
9.1.1 Stateful Session Bean类:CartEJB.java 230
9.1.2 Home接口:CartHome.Java 235
9.1.3 Remote接口:Cart.Java 235
9.1.4 Helper类 236
9.1.5 客户机:CartClient.java 237
9.1.6 在Stateful和Stateless Session Beans之间做出选择 238
第2节 剖析Session Bean 240
9.2.1 简介 240
9.2.2 EJB容器 241
9.2.3 EJB对象 242
9.2.4 session对象的标识符 243
9.2.5 客户机角度的session bean生命周期 243
9.2.6 创建和使用session bean 244
第3节 Session Bean组件的约定 244
9.3.1 简介 244
9.3.2 会话的状态 245
9.3.3 Session Bean与其容器之间的协议 246
9.3.4 Stateful Session Bean状态图 248
9.3.5 Stateful Session Bean的序列图 250
9.3.6 Stateless Session Bean 253
9.3.7 Stateless Session Bean的状态图 254
9.3.8 Stateless Session Bean的序列图 254
9.3.9 Enterprise Bean提供者的责任 256
9.3.10 容器提供者的责任 258
第4节 Session Bean的例子 259
9.4.1 session bean提供者的责任 259
9.4.2 容器提供者提供的类 260
9.4.3 容器提供者的责任 260
第10章 Entity Bean 261
第1节 概述 261
10.1.1 简介 261
10.1.2 Entity Beans的特征 262
10.1.3 异常处理 263
第2节 Bean管理持久存储(BMP)的实例 264
10.2.1 Entity Bean类:AccountEJB.java 264
10.2.2 Home接口:AccountHome.java 278
10.2.3 Remote接口:Account.java 279
10.2.4 部署并运行AccountEJB实例 280
10.2.5 运行客户机 286
第3节 容器管理持久存储(CMP)的实例 288
10.3.1 Entity Bean类:ProductEJB.java 288
10.3.2 Home接口:ProductHome.java 291
10.3.3 Remote接口:Product.java 292
10.3.4 客户机类:ProductClient.java 292
10.3.5 创建表 294
10.3.6 运行ProductEJB实例 294
第4节 Entity Bean组件的约定 300
10.4.1 运行时执行模式 300
10.4.2 Entity的持久存储 300
10.4.3 实例的生命周期 302
10.4.4 Entity Bean组件的约定 303
10.4.5 多个事务的并行访问 307
10.4.6 不可重入和可重入的实例 307
10.4.7 Enterprise Bean提供者的责任 308
10.4.8 容器提供者的责任 310
10.4.9 容器管理的Entity Bean 311
第5节 序列图 313
10.5.1 创建一个entity对象 313
10.5.2 在一个事务中钝化和活化一个实例 316
10.5.3 提交一个事务 317
10.5.4 启动下一个事务 320
10.5.5 移走一个entity对象 321
10.5.6 发现一个对象 322
10.5.7 从池中增加或移走实例 323
第6节 Entity Bean的例子 324
10.6.1 Enterprise Bean提供者的责任 324
10.6.2 容器提供者提供的类 325
10.6.3 容器提供者的责任 325
第11章 打包与部署 326
第1节 概述 326
11.1.1 简介 326
11.1.2 角色与任务 327
第2节 打包J2EE应用程序 330
11.2.1 EJB模块 330
11.2.2 将组件打包放进EJB模块 331
11.2.3 Web模块 332
11.2.4 将组件打包放进Web模块 333
11.2.5 应用程序的客户端模块 333
第3节 部署描述符 334
11.3.1 简介 334
11.3.2 部署描述符的一般元素 334
11.3.3 Enterprise Bean的元素 340
11.3.4 Web组件元素 342
第4节 部署工具 344
11.4.1 部署工具的行为 344
11.4.2 部署工具的要求 345
第12章 安全 349
第1节 概述 349
12.1.1 J2EE的安全 349
12.1.2 J2EE的角色与安全 351
12.1.3 资源的登录 352
第2节 认证 354
12.2.1 J2EE的用户、领域和组 354
12.2.2 客户机认证 355
12.2.3 管理J2EE用户和组 356
第3节 授权 356
12.3.1 声明角色 356
12.3.2 声明角色的引用 357
12.3.3 映射角色到J2EE的用户和组 358
第4节 其他安全措施 359
12.4.1 Bean管理的安全性 359
12.4.2 证书及其工具 360
12.4.3 设置J2EE服务器证书 362
第13章 事务 364
第1节 EJB的事务 364
13.1.1 简介 364
13.1.2 EJB事务的案例 365
13.1.3 事务的属性 367
第2节 认识JTS 369
13.2.1 简介 369
13.2.2 事务管理器的功能 370
13.2.3 事务管理器的实现 371
第3节 认识JTA 372
13.3.1 JTA与其他Java API的关系 373
13.3.2 Java Transaction API 373
13.3.3 在应用程序服务器中使用JTA 377
第14章 EIS与J2EE Connector 381
第1节 企业信息系统 381
14.1.1 企业信息系统集成案例 381
14.1.2 关系数据库管理系统的访问 383
14.1.3 访问对象 384
14.1.4 连接 386
第2节 J2EE Connector体系结构 387
14.2.1 简介 388
14.2.2 基本原理 390
14.2.3 Connector体系结构 391
14.2.4 案例 393
14.2.5 连接管理的目标 394
第3节 J2EE Connector的连接管理 394
14.3.1 体系结构:连接管理 394
14.3.2 应用程序编程模型 396
14.3.3 接口/类的规范 397
14.3.4 错误日志与跟踪 408
14.3.5 对象图 409
14.3.6 序列图 409
14.3.7 体系结构:非管理的环境 415
第4节 CCI简介 417
第15章 XML Java编程 419
第1节 XML入门 419
15.1.1 概述 419
15.1.2 XML如何使用 419
15.1.3 XML的语法 420
15.1.4 XML的元素 422
15.1.5 XML的属性 422
15.1.6 XML文档:cd_catalog.xml 424
第2节 DTD简介 426
15.2.1 元素 426
15.2.2 属性 427
第3节 XML文件的分析 428
15.3.1 XML解析器及其种类 428
15.3.2 校验XML文档的合法性 429
第4节 常用的接口和类 432
15.4.1 DocumentBuilderFactory类 432
15.4.2 DocumentBuilder类 432
15.4.3 Doeument接口 433
15.4.4 Element接口 435
15.4.5 Node接口 436
15.4.6 Attr接口 439
15.4.7 Text接口 439
15.4.8 HandlerBase类 440
15.4.9 DefaultHandler类 441
15.4.10 XMLReaderFactory类 444
15.4.11 XMLReader接口 444
15.4.12 Attributes接口 447
15.4.13 SAXParseException类 448
15.4.14 SAXException类 449
15.4.15 XmlDocument类 449
15.4.16 ElementNode类 451
15.4.17 Resolver类 452
第5节 实例 452
15.5.1 使用DOM创建XML文档 452
15.5.2 使用Swing JTree显示XML文档 454
15.5.3 使用SAX统计XML文件的标记 463
第16章 RMI编程技术 468
第1节 概述 468
16.1.1 分布式应用程序的责任 468
16.1.2 RMI的编程思想 469
第2节 RMI的接口和类 470
16.2.1 java.rmi.Remote接口 470
16.2.2 java.rmi.RemoteException类 470
16.2.3 java.rmi.server.RemoteObject类及其子类 471
16.2.4 java.rmi.registry.LocateRegistry类 471
16.2.5 java.rmi.Naming类 472
16.2.6 java.rmi.server.RemoteServer类 473
16.2.7 java.rmi.server.UnicastRemoteObject类 473
16.2.8 java.rmi.RMISecurityManager类 474
第3节 stub与skeleton 475
16.3.1 stub的功能 475
16.3.2 skeleton的功能 475
第4节 Java RMI编译器:rmic 475
第5节 RMI版的HelloWorld 477
16.5.1 编写RMI服务器 477
16.5.2 编写RMI客户端程序 479
16.5.3 批处理文件:RmiHello.bat 480
16.5.4 安全策略文件 481
16.5.5 本地运行 482
16.5.6 在不同机器上运行RMI软件 483
第6节 使用RMI技术实现分布式数据库操作 484
16.6.1 远程接口 485
16.6.2 实现远程接口 485
16.6.3 RMI服务器程序 488
16.6.4 RMI客户端程序 489
16.6.5 编译程序:compile.bat 491
16.6.6 安全策略文件:RmiJDBCServer.policy 492
16.6.7 启动RMI服务器 492
第17章 Java CORBA编程技术 493
第1节 CORBA与Java IDL 493
17.1.1 关于CORBA 493
17.1.2 关于Java IDL 494
17.1.3 Nutshell中的CORBA 494
17.1.4 Java IDL瞬态名字服务器:tnameserv 495
17.1.5 关于idlj.exe 496
第2节 相关的类和接口 497
17.2.1 org.omg.CORBA.ORB类 497
17.2.2 org.omg.CORBA.Object接口 500
17.2.3 org.omg.CosNaming.NamingContext接口 501
17.2.4 org.omg.CosNaming.NameComponent类 502
17.2.5 org.omg.CORBA.Request类 503
17.2.6 org.omg.CORBA.NVList类 504
第3节 一个简单的实例 505
17.3.1 批处理文件:CorbaDemo.bat 505
17.3.2 定义并转换接口文件:CorbaDemo.idl 506
17.3.3 实现CORBA服务器:TheDateServant.java 507
17.3.4 实现客户机:CorbaDemoClient.java 510
17.3.5 本地运行 511
17.3.6 在网络中不同计算机上运行 513
17.3.7 在applet中实现CORBA客户机 513
第18章 JavaMail 516
第1节 概述 516
18.1.1 JavaMail的体系结构 516
18.1.2 JavaMail类的层次结构 517
18.1.3 JavaMail框架 517
18.1.4 JavaMail事件模型 519
18.1.5 使用JavaMail API 519
第2节 Message及其相关的接口和类 520
18.2.1 简介 520
18.2.2 Message类的方法 521
18.2.3 相关的接口和类 521
18.2.4 消息的创建与发送 525
第3节 Mail Session 525
18.3.1 简介 525
18.3.2 提供者的登记 526
18.3.3 实例 528
18.3.4 安全管理 529
18.3.5 Store URL与Folder URL 530
第4节 消息的存储与获得 530
18.4.1 Store类 530
18.4.2 Folder类 531
18.4.3 Search的步骤 533
第5节 JavaBeans活动框架(JAF) 534
18.5.1 概述 534
18.5.2 对消息内容的操作 535
第6节 消息的写作 535
18.6.1 创建Message对象 536
18.6.2 消息的创建 536
18.6.3 设置消息的属性 536
18.6.4 设置Message的内容 537
18.6.5 创建MIME Multipart消息 537
第7节 传送的协议与机制 538
18.7.1 得到Transport对象 538
18.7.2 Transport的方法 538
18.7.3 Transport的事件 539
18.7.4 使用Transport类 539
第8节 Internet邮件 540
18.8.1 简介 540
18.8.2 MimeMessage类 540
18.8.3 MimeBodyPar类 541
18.8.4 MimeMultipart类 541
18.8.5 MimeUtility类 542
18.8.6 ContentType类 543
第9节 使用JavaMail API收发邮件 543
18.9.1 接收邮件 543
18.9.2 发送普通的邮件 546
18.9.3 发送带附件的邮件 548
第19章 JMS编程技术 551
第1节 概述 551
19.1.1 Messaging的定义 551
19.1.2 JMS API 551
第2节 JMS API的基本概念 553
19.2.1 JMS API的结构体系 553
19.2.2 消息域 553
19.2.3 Message消费 554
19.2.4 JMS API编程模型 555
第3节 编写简单的JMS客户机应用程序 560
19.3.1 简单的point-to-point 561
19.3.2 简单的Publish/Subscribe 568
第4节 创建强壮的JMS应用程序 575
19.4.1 使用基本的可靠性机制 575
19.4.2 使用先进的可靠性机制 578
第5节 在J2EE应用程序中使用JMS API 580
19.5.1 使用Enterprise Bean产生并同步地接收消息 580
19.5.2 使用Message-Driven Bean 581
19.5.3 管理分布式事务 583
第6节 使用JMS API的J2EE应用程序 584
19.6.1 编写组件 584
19.6.2 创建和打包 588
19.6.3 部署和运行 593
附录A 配置JbuiIder 5.0和WebIogic 6.X的开发环境 596
附录B Netscape目录服务器的安装 598
附录C 部署描述符文件 602
C.1 application.xml 602
C.1.1 语法和格式 602
C.1.2 实例 602
C.2 eib-iar.xml 603
C.2.1 语法和格式 603
C.2.2 实例 606
C.3 web.xml 611
C.3.1 语法和格式 611
C.3.2 实例 614
主要参考文献 619