本书主要讲解了开发者如何使用J2EE体系结构为各事务组件编写关键逻辑。通过对Java servlet、JavaServer页面及EJB技术的理解,本书示例了如何设计和构建安全且可扩展的Java n层应用。内容包括:如何使用JSP页面分割事务和表示逻辑;如何使用EJB创建可扩展的应用;及如何使用CORBA、XML和Java Message Service与其他系统集成。\r\n本书需要读者对Java编程语言的知识及分布式开发基础比较熟悉,主要面向用J2EE开发分布式企业级应用的专业Java开发者。\r\n\r\n
\r\n
译者序\r\n作者简介\r\n前言\r\n第1章 Java和J2EE平台 1\r\n1.1 企业的今天 1\r\n1.1.1 系统结构 2\r\n1.1.2 答案是Java吗 5\r\n1.2 J2EE平台 7\r\n1.2.1 J2EE运行环境 7\r\n1.2.2 J2EE API 8\r\n1.3 J2EE体系结构—包容器 9\r\n1.4 J2EE技术 14\r\n1.4.1 组件技术 15\r\n1.4.2 服务技术 16\r\n1.4.3 通信技术 17\r\n1.4.4 XML 18\r\n1.5 部署J2EE应用程序 20\r\n1.5.1 J2EE应用开发和部署中的角色 20\r\n1.5.2 应用组件开发 21\r\n1.5.3 把应用组件组合成模块 21\r\n1.5.4 把模块组合成应用 21\r\n1.5.5 应用部署 22\r\n1.6 小结 22\r\n第2章 采用RMI的分布式计算 23\r\n2.1 RMI体系结构 24\r\n2.1.1 Stub和Skeleton层 25\r\n2.1.2 远程引用层 26\r\n2.1.3 传输层 26\r\n2.2 定位远程对象 27\r\n2.3 RMI异常 30\r\n2.4 用RMI开发应用程序 31\r\n2.4.1 定义远程接口 31\r\n2.4.2 实现远程接口 31\r\n2.4.3 编写使用远程对象的客户程序 33\r\n2.4.4 产生Stub和Skeleton 33\r\n2.4.5 注册对象 33\r\n2.4.6 运行客户程序和服务器 35\r\n2.5 RMISecurityManager 35\r\n2.6 在RMI中传递的参数 35\r\n2.6.1 基本类型参数 36\r\n2.6.2 对象类型参数 36\r\n2.6.3 远程对象参数 36\r\n2.7 分布式垃圾回收器 37\r\n2.8 动态加载类 40\r\n2.9 远程回调 44\r\n2.10 对象激活 46\r\n2.10.1 Activation Group 48\r\n2.10.2 使对象为可激活的 50\r\n2.10.3 激活 56\r\n2.11 定制套接字和SSL 57\r\n2.12 RMI. 防火墙和HTTP 68\r\n2.12.1 HTTP隧道 69\r\n2.12.2 SOCKS协议 70\r\n2.12.3 可下载的套接字集合 70\r\n2.13 IIOP上的RMI 70\r\n2.13.1 与CORBA的互操作性 71\r\n2.13.2 RMI-IIOP和Java IDL 72\r\n2.13.3 用RMI-IIOP编写程序 72\r\n2.13.4 RMI-IIOP和J2EE 76\r\n2.14 小结 76\r\n第3章 用JDBC进行数据库程序设计 78\r\n3.1 数据库驱动器 79\r\n3.1.1 类型1—JDBC-ODBC桥 79\r\n3.1.2 类型2—部分采用Java, 另一部分\r\n 采用本地驱动器 80\r\n3.1.3 类型3—中介数据库访问服务器 81\r\n3.1.4 类型4—纯的Java驱动器 81\r\n3.2 JDBC 2.1 Core API 83\r\n3.2.1 加载数据库驱动器和打开连接 84\r\n3.2.2 建立数据库连接 87\r\n3.2.3 创建和执行SQL语句 88\r\n3.2.4 用ResultSet接口来查询数据库 94\r\n3.2.5 准备语句 96\r\n3.2.6 把SQL类型映射到Java类型 98\r\n3.2.7 事务支持 99\r\n3.2.8 可滚动的和可更新的结果集 100\r\n3.2.9 批量更新 106\r\n3.3 JDBC 2.0 Optional Package API 106\r\n3.4 JDBC数据源 107\r\n3.4.1 javax.sql.DataSource接口 108\r\n3.4.2 JNDI和数据源 109\r\n3.4.3 修定后的Movie目录 112\r\n3.5 连接池 112\r\n3.5.1 传统的连接池 114\r\n3.5.2 JDBC 2.0连接池 115\r\n3.6 分布事务 118\r\n3.6.1 什么是事务 118\r\n3.6.2 简单背景知识 119\r\n3.6.3 事务处理—概念 119\r\n3.6.4 事务处理系统的构件模块 120\r\n3.6.5 JDBC 2.0分布事务 121\r\n3.6.6 实现分布事务的步骤 123\r\n3.7 行集 125\r\n3.7.1 javax.sql.RowSet接口 126\r\n3.7.2 行集的类型 128\r\n3.7.3 缓存的行集 128\r\n3.7.4 JDBC行集 130\r\n3.7.5 Web行集 130\r\n3.8 小结 131\r\n第4章 JNDI和LDAP 132\r\n4.1 命名和目录服务 132\r\n4.1.1 命名服务 132\r\n4.1.2 目录服务 133\r\n4.2 进入LDAP 134\r\n4.2.1 访问控制 134\r\n4.2.2 白页服务 135\r\n4.2.3 分布式计算目录 136\r\n4.2.4 LDAP数据 136\r\n4.3 JNDI介绍 139\r\n4.3.1 使用JNDI 141\r\n4.3.2 JNDI服务提供者/JNDI驱动器 141\r\n4.4 基本的LDAP操作 143\r\n4.4.1 标准的LDAP操作 143\r\n4.4.2 连接到LDAP服务器 143\r\n4.4.3 认证或LDAP绑定 144\r\n4.4.4 搜索一个LDAP服务器 146\r\n4.4.5 对LDAP入口进行操作 154\r\n4.5 在LDAP中存储和检索Java对象 161\r\n4.5.1 传统的LDAP 161\r\n4.5.2 串行化的Java对象 162\r\n4.5.3 Java References 162\r\n4.6 DSML 162\r\n4.7 一个银行帐户JNDI应用程序 163\r\n4.7.1 用RMI来使用LDAP 163\r\n4.7.2 应用程序内容 164\r\n4.7.3 JNDIRemoteBankInterface 165\r\n4.7.4 JNDIRemoteBankServer 166\r\n4.7.5 JNDIRemoteBankClient 168\r\n4.7.6 Account类 169\r\n4.7.7 运行应用程序 170\r\n4.7.8 不采用注册表的RMI 171\r\n4.7.9 创建一个对象目录 173\r\n4.8 小结 173\r\n第5章 XML基础 175\r\n5.1 XML初步 175\r\n5.1.1 XML和XML文档 175\r\n5.1.2 XML处理器/分析器说明 178\r\n5.1.3 为什么XML是强大的 178\r\n5.1.4 XML的主要用途 179\r\n5.1.5 Java和XML, J2EE中的XML 179\r\n5.2 XML技术初步 181\r\n5.2.1 标准化过程和W3C的角色 181\r\n5.2.2 SGML和XML 182\r\n5.2.3 DTD和XML Schema 183\r\n5.2.4 XML风格 183\r\n5.2.5 名字空间 184\r\n5.3 形式良好的约束 184\r\n5.3.1 属性引用 184\r\n5.3.2 树结构 184\r\n5.3.3 标记中显式的树结构 185\r\n5.3.4 一个HTML/XHTML/XML例子 185\r\n5.3.5 从HTML到XHTML 186\r\n5.4 XML文档的逻辑结构 187\r\n5.4.1 没有DTD的XML文档 187\r\n5.4.2 具有DTD的XML文档 191\r\n5.4.3 DTD和实体 195\r\n5.4.4 阅读著名的DTD 196\r\n5.5 DTD. 分析器和验证 197\r\n5.5.1 分析器和DTD 197\r\n5.5.2 XML Schema 197\r\n5.5.3 DTD验证器 198\r\n5.6 XML名字空间 199\r\n5.6.1 主要思想——前缀和URI 200\r\n5.6.2 重要的说明 200\r\n5.6.3 名字空间声明的范围 201\r\n5.6.4 缺省的名字空间 201\r\n5.6.5 名字空间和属性名字 202\r\n5.6.6 名字空间和DTD 203\r\n5.7 用CSS风格化XML 203\r\n5.7.1 CSS1例子和解释 203\r\n5.7.2 选择子和声明 204\r\n5.7.3 名字空间和CSS 206\r\n5.8 用XSLT风格化XML 207\r\n5.8.1 什么是XPath 207\r\n5.8.2 试用XSLT 208\r\n5.8.3 风格表单概貌 208\r\n5.8.4 一个稍稍不同的改变 211\r\n5.8.5 一点改进 212\r\n5.9 未来的注目点 214\r\n5.10 小结 214\r\n第6章 用DOM和SAX进行XML分析 216\r\n6.1 SAX. JAXP和一个简单的例子 218\r\n6.1.1 SAX概述 218\r\n6.1.2 JAXP的结构 219\r\n6.1.3 一个简单的例子:计数元素 220\r\n6.2 DOM和修改后的例子 222\r\n6.2.1 节点类型 223\r\n6.2.2 节点方法 223\r\n6.2.3 用DOM计数元素 223\r\n6.3 本章中的应用例子概述 225\r\n6.3.1 实用类 225\r\n6.3.2 PropDict类 225\r\n6.3.3 Logger类 229\r\n6.4 一个DOM应用程序 231\r\n6.5 DOM进阶 242\r\n6.5.1 DOM Level 1 242\r\n6.5.2 XML. DOM和语言绑定 243\r\n6.5.3 在XML 1.0规范中没有DOM特征 244\r\n6.5.4 DOM绑定 245\r\n6.6 SAX应用程序 249\r\n6.6.1 SAX回顾 249\r\n6.6.2 Sax2Writer 249\r\n6.6.3 Dom2Sax 253\r\n6.7 Java对象的SAX分析器和SAX筛选器 258\r\n6.7.1 分析不是XML文本的对象 259\r\n6.7.2 一个真实分析的例子 261\r\n6.8 小结 264\r\n第7章 Web包容器简介 265\r\n7.1 HTTP协议 266\r\n7.1.1 HTTP请求方法 266\r\n7.1.2 HTTP应答 267\r\n7.2 Web包容器和Web应用程序 267\r\n7.2.1 Java Servlet 268\r\n7.2.2 JSP 270\r\n7.2.3 部署描述器 271\r\n7.2.4 Web包容器的类型 272\r\n7.3 第一个Web应用程序 273\r\n7.3.1 准备Web包容器 273\r\n7.3.2 创建HTML文件 274\r\n7.3.3 创建servlet 274\r\n7.3.4 编译源代码 275\r\n7.3.5 编写部署描述器 275\r\n7.3.6 测试这个应用程序 276\r\n7.4 Web应用程序的组成 277\r\n7.5 小结 282\r\n第8章 servlet程序设计 283\r\n8.1 Java Servlet API概貌 283\r\n8.2 servlet实现 286\r\n8.2.1 servlet接口 286\r\n8.2.2 GenericServlet类 288\r\n8.2.3 SingleThreadModal接口 288\r\n8.2.4 HttpServlet类 289\r\n8.3 servlet配置 291\r\n8.3.1 ServletConfig接口 291\r\n8.3.2 得到ServletConfig的引用 292\r\n8.4 servlet异常 293\r\n8.4.1 ServletException类 293\r\n8.4.2 UnavailableException类 293\r\n8.5 Servlet生命周期 294\r\n8.6 servlet生命周期—FreakServlet 296\r\n8.6.1 实例化 300\r\n8.6.2 初始化 300\r\n8.6.3 服务 301\r\n8.6.4 消亡 303\r\n8.7 用于请求和应答的API 304\r\n8.7.1 ServletRequest接口 304\r\n8.7.2 HttpServletRequest接口 306\r\n8.7.3 ServletResponse接口 309\r\n8.7.4 HttpServletResponse接口 311\r\n8.8 servlet程序设计—技术支持应用程序 312\r\n8.8.1 建立HTML页面 312\r\n8.8.2 准备数据库 314\r\n8.8.3 创建一个序列器 316\r\n8.8.4 编写Servlet 316\r\n8.8.5 编译源代码 319\r\n8.8.6 部署描述器 319\r\n8.8.7 运行技术支持应用程序的条件 320\r\n8.8.8 数据库连接说明 322\r\n8.9 小结 323\r\n第9章 servlet会话. 上下文和协作 324\r\n9.1 无状态和会话 325\r\n9.2 用于会话跟踪的技术 326\r\n9.2.1 URL重写 327\r\n9.2.2 隐藏表单域 328\r\n9.2.3 Cookie 328\r\n9.3 采用Java Servlet API的会话跟踪 330\r\n9.3.1 会话创建和跟踪 330\r\n9.3.2 HttpSession接口 331\r\n9.3.3 绑定和删除会话中的对象 341\r\n9.3.4 使用会话的简单的购物车例子 342\r\n9.4 servlet上下文 346\r\n9.4.1 ServletContext接口 347\r\n9.4.2 使用上下文和会话的聊天应用程序 349\r\n9.5 servlet协作 363\r\n9.5.1 servlet链 363\r\n9.5.2 请求指派 364\r\n9.5.3 修改后的技术支持应用程序 365\r\n9.6 小结 376\r\n第10章 Web部署. 认证和包装 377\r\n10.1 Web应用程序的结构 377\r\n10.1.1 目录结构 377\r\n10.1.2 Web档案文件 379\r\n10.2 把请求映射到应用程序和servlet上 380\r\n10.3 Web应用程序的安全 384\r\n10.3.1 程序安全 387\r\n10.3.2 基于表单的认证 387\r\n10.4 部署配置 390\r\n10.4.1 上下文初始化参数 391\r\n10.4.2 servlet初始化参数 392\r\n10.4.3 在启动时加载servlet 392\r\n10.4.4 会话超时 393\r\n10.4.5 MIME映射 393\r\n10.4.6 欢迎文件 394\r\n10.4.7 错误页面 394\r\n10.4.8 分布式应用程序 396\r\n10.5 小结 397\r\n第11章 JSP基础和体系结构 398\r\n11.1 介绍JSP 398\r\n11.2 内容和形式 402\r\n11.2.1 JSP指令 403\r\n11.2.2 脚本元素 407\r\n11.2.3 标准动作 411\r\n11.2.4 隐含的对象 425\r\n11.2.5 范围 426\r\n11.2.6 XML等价标记 428\r\n11.3 JSP设计基础 429\r\n11.3.1 以页面为中心或客户-服务器的\r\n 设计 429\r\n11.3.2 Page-View 430\r\n11.3.3 采用Bean的Page-View 430\r\n11.4 “指派者”途径 431\r\n11.4.1 Mediator-View 431\r\n11.4.2 Mediator-Composite View 431\r\n11.4.3 Service to Workers 432\r\n11.5 JSP技术支持 433\r\n11.5.1 应用程序设计 435\r\n11.5.2 欢迎页面 435\r\n11.5.3 处理请求的JSP 436\r\n11.5.4 TechSupportBean 437\r\n11.5.5 注册表单 439\r\n11.5.6 Registration JSP 439\r\n11.5.7 Response和Banner JSP 440\r\n11.5.8 错误页面 441\r\n11.5.9 部署应用程序 441\r\n11.6 小结 442\r\n第12章 JSP标记扩展 443\r\n12.1 标记扩展101 443\r\n12.2 标记扩展剖析 450\r\n12.2.1 标记处理器 450\r\n12.2.2 标记库描述器 457\r\n12.2.3 在JSP页面中使用标记扩展 459\r\n12.2.4 部署和包装标记库 459\r\n12.3 编写标记扩展 462\r\n12.3.1 处理属性 463\r\n12.3.2 体内容 465\r\n12.3.3 引入脚本变量的标记 466\r\n12.3.4 体标记 470\r\n12.3.5 标记嵌套 476\r\n12.3.6 处理错误 481\r\n12.4 标记扩展元语 481\r\n12.5 小结 483\r\n第13章 高级的定制JSP标记 484\r\n13.1 一个XSL风格的标记 484\r\n13.2 Swing模型标记 489\r\n13.2.1 使用Swing ListModel 489\r\n13.2.2 创建名字-值对的映射模型 492\r\n13.2.3 使用Swing TableModel 496\r\n13.3 分发 512\r\n13.4 隐藏的细节内容 513\r\n13.5 第三方的定制标记 516\r\n13.5.1 流控制 516\r\n13.5.2 J2EE技术 518\r\n13.5.3 客户端验证 520\r\n13.5.4 工具支持和未来的方向 521\r\n13.6 小结 521\r\n第14章 编写可维护的JSP页面 523\r\n14.1 目标 523\r\n14.2 在多层体系结构中的JSP 524\r\n14.3 用于编写可维护的JSP的技术 526\r\n14.3.1 请求控制器体系结构 526\r\n14.3.2 在JSP中使用包含 530\r\n14.3.3 使用JSP bean 531\r\n14.3.4 使用标记扩展 534\r\n14.3.5 处理迭代 536\r\n14.3.6 处理条件逻辑 537\r\n14.3.7 使用风格化的XML 538\r\n14.3.8 什么时候为JSP使用定制的超类 539\r\n14.3.9 公共对象的标准抽象 539\r\n14.3.10 处理异常 540\r\n14.3.11 国际化 540\r\n14.4 文档化JSP层 541\r\n14.5 工具支持 542\r\n14.6 可维护的JSP的编码标准 543\r\n14.6.1 设计原则和代码风格 543\r\n14.6.2 格式化JSP页面 545\r\n14.7 DBExplorer应用程序 547\r\n14.7.1 需求 548\r\n14.7.2 设计 550\r\n14.7.3 实现 551\r\n14.7.4 重新来看这个应用程序 583\r\n14.7.5 部署应用程序 583\r\n14.8 小结 585\r\n第15章 JSP和XML—协同工作 586\r\n15.1 JSP和XML 586\r\n15.2 一个配置化的时事通信—一个实例\r\n 研究 587\r\n15.2.1 澄清 588\r\n15.2.2 主要的设计特点 588\r\n15.2.3 主要的组件概述 588\r\n15.2.4 试一试 590\r\n15.3 配置组件 594\r\n15.3.1 反射包 595\r\n15.3.2 一个配置文件的例子 596\r\n15.3.3 用于XML配置的Java代码 599\r\n15.3.4 JSP和配置文件 609\r\n15.4 数据库组件 609\r\n15.4.1 DBConnector和它的缺省的实现 610\r\n15.4.2 QueryHandler 611\r\n15.4.3 ResultSetParser 617\r\n15.4.4 UserDataHandler 621\r\n15.5 XML数据访问组件 624\r\n15.5.1 DomSearch查询 624\r\n15.5.2 DomSearch输出 625\r\n15.5.3 实例化DomSearch—DSNext-\r\n Match 625\r\n15.5.4 DomSearch的XML配置数据 626\r\n15.5.5 在一个会话期间使用DomSearch 627\r\n15.6 表示组件 627\r\n15.6.1 注册页面 627\r\n15.6.2 主帧页面和初始化 628\r\n15.6.3 控制和数据帧 629\r\n15.7 控制组件 634\r\n15.7.1 StampPageFactory bean 634\r\n15.7.2 StampPage Bean 638\r\n15.8 对基本功能的扩充 640\r\n15.9 小结 640\r\n第16章 基于XML的JDBC Connector \r\n Servlet框架 641\r\n16.1 实现JDBC Connector Servlet 641\r\n16.1.1 框架的功能需求 642\r\n16.1.2 JCS体系结构 644\r\n16.1.3 JCS脚本框架 645\r\n16.1.4 实现JCS的Java类 650\r\n16.1.5 其他的内容 674\r\n16.1.6 包装J2EE部署的框架 676\r\n16.1.7 把JCS部署到J2EE Servlet包容器中 678\r\n16.2 使用JDBC Connector Servlet 679\r\n16.2.1 Guestbook样本应用程序 679\r\n16.2.2 SQL Server数据库浏览器应用程序 692\r\n16.3 小结 697\r\n第17章 JavaMail 699\r\n17.1 建立指导 699\r\n17.2 JavaMail API 701\r\n17.2.1 javax.mail.Session 701\r\n17.2.2 javax.mail.Authenticator和Password\r\n Authentication 703\r\n17.2.3 javax.mail.Message 704\r\n17.2.4 javax.mail.Part 710\r\n17.2.5 javax.mail.Multipart和BodyPart 714\r\n17.2.6 javax.mail.internet.MimePart 714\r\n17.2.7 javax.mail.internet.MimeMessage 716\r\n17.2.8 javax.mail.internet.MimeMultipart和\r\n MimeBodyPart 717\r\n17.2.9 javax.mail.Service 718\r\n17.2.10 javax.mail.Transport 719\r\n17.2.11 javax.mail.Store 721\r\n17.2.12 javax.mail.Folder 722\r\n17.3 javax.mail.search.* 726\r\n17.4 工作例子 727\r\n17.5 小结 741\r\n第18章 EJB体系结构与设计 742\r\n18.1 什么是EJB 743\r\n18.1.1 bean变体 744\r\n18.1.2 在设计中使用EJB的原因 745\r\n18.2 EJB包容器及其服务 746\r\n18.3 EJB应用 751\r\n18.3.1 客户端开发人员的观点 751\r\n18.3.2 bean程序员的观点 754\r\n18.3.3 EJB组件所禁止的操作 760\r\n18.4 Web中的EJB组件 762\r\n18.5 客户端层至EJB的访问 764\r\n18.6 EJB层设计 765\r\n18.6.1 UML use case 765\r\n18.6.2 分析与实现 767\r\n18.6.3 EJB设计示例 769\r\n18.7 小结 776\r\n第19章 会话bean与业务逻辑 777\r\n19.1 会话bean与状态 777\r\n19.1.1 业务逻辑表示 778\r\n19.1.2 关于会话状态的难点问题 780\r\n19.1.3 会话bean与持久化存储 782\r\n19.2 财政资助计算器bean 782\r\n19.2.1 无状态财政计算器bean 783\r\n19.2.2 有状态财政计算器 bean 789\r\n19.2.3 合并有状态与无状态bean 797\r\n19.3 实现制造应用程序 801\r\n19.3.1 客户端与业务逻辑接口 802\r\n19.3.2 无状态会话bean的实现 815\r\n19.3.3 有状态会话bean的实现 824\r\n19.4 小结 831\r\n第20章 实体bean与持久化 832\r\n20.1 为什么不使用会话bean 832\r\n20.1.1 有状态会话bean应用 832\r\n20.1.2 无状态会话bean应用 835\r\n20.1.3 实体bean的优点 837\r\n20.2 包容器或者bean管理的持久化 838\r\n20.2.1 SportBean实验室 839\r\n20.2.2 完成运动队示例 859\r\n20.3 关系 867\r\n20.4 完成这里的制造应用程序 868\r\n20.4.1 Order bean 868\r\n20.4.2 Product bean 874\r\n20.4.3 完成部署描述器 878\r\n20.4.4 运行制造应用程序 880\r\n20.5 小结 885\r\n第21章 EJB包容器服务 887\r\n21.1 事务 888\r\n21.1.1 无包容器事务 889\r\n21.1.2 事务的声明性语法 896\r\n21.1.3 用户控制的事务 900\r\n21.1.4 隔离级别 901\r\n21.1.5 长事务 904\r\n21.1.6 两阶段提交 905\r\n21.2 安全性 906\r\n21.2.1 确定安全性需求 907\r\n21.2.2 编程性访问控制 910\r\n21.2.3 安全性与应用程序设计 912\r\n21.3 异常 913\r\n21.3.1 应用程序异常 913\r\n21.3.2 系统异常 916\r\n21.4 通信 919\r\n21.4.1 异构服务器之间的通信 919\r\n21.4.2 In-VM方法调用 920\r\n21.5 小结 921\r\n第22章 开发与部署功能 922\r\n22.1 企业级bean提供者 923\r\n22.2 应用程序组装者 934\r\n22.3 部署描述器 941\r\n22.4 系统管理员 944\r\n22.5 包容器/应用程序服务器开发商 946\r\n22.6 制造应用程序的Web接口 947\r\n22.7 关于解决问题的提示 969\r\n22.8 小结 970\r\n第23章 EJB 2.0 972\r\n23.1 EJB 2.0的新特性 972\r\n23.2 EJB 2.0的由包容器管理的持久化 973\r\n23.2.1 cmp-field类型 976\r\n23.2.2 cmr-field类型 977\r\n23.2.3 完整的CMP 2.0部署描述器 983\r\n23.2.4 编写CMP 2.0 bean 988\r\n23.3 EJB 2.0查询语言 995\r\n23.3.1 程序员在哪里指定查询 996\r\n23.3.2 程序员如何指定查询 997\r\n23.3.3 来自于制造应用程序的查询 1001\r\n23.4 消息驱动的bean 1001\r\n23.5 位于本地接口的业务方法 1004\r\n23.6 小结 1011\r\n第24章 J2EE应用程序设计考虑事项 1012\r\n24.1 世事变迁 1012\r\n24.2 设计环境 1013\r\n24.3 体系结构与设计 1015\r\n24.3.1 体系结构的类型 1016\r\n24.3.2 强制. 模型和重复 1017\r\n24.4 分布式设计 1019\r\n24.5 从头开始 1020\r\n24.6 增加中间层 1023\r\n24.7 购物 1025\r\n24.8 提交与处理订单 1027\r\n24.9 已经学习过的内容 1030\r\n24.9.1 将模式-视图-控制器应用于用户\r\n 接口 1030\r\n24.9.2 JSP设计原则 1030\r\n24.9.3 选择适当的数据格式 1030\r\n24.9.4 减少数据传递量 1031\r\n24.9.5 设计分布式接口 1031\r\n24.9.6 用于同步操作的消息映射 1032\r\n24.9.7 事务规划 1032\r\n24.10 购物订单系统之外的问题 1032\r\n24.10.1 EJB接口设计 1032\r\n24.10.2 分布式事件 1033\r\n24.10.3 处理数据库 1034\r\n24.10.4 状态管理 1035\r\n24.11 体系结构与进程 1036\r\n24.12 小结 1037\r\n第25章 性能与伸缩性 1038\r\n25.1 妥协方案 1039\r\n25.1.1 开发周期 1039\r\n25.1.2 代理的优缺点 1040\r\n25.2 可伸缩性的重要性 1042\r\n25.3 性能 1043\r\n25.3.1 编码问题 1044\r\n25.3.2 性能测试与调试 1045\r\n25.3.3 设计期间的问题 1047\r\n25.4 伸缩性 1060\r\n25.4.1 伸缩性与性能测试 1061\r\n25.4.2 高伸缩性设计 1064\r\n25.4.3 数据流与缓存 1070\r\n25.4.4 由备份实现的伸缩性 1075\r\n25.5 有效性能与伸缩性的项目规划 1077\r\n25.6 小结 1078\r\n第26章 调试Java服务器应用 1079\r\n26.1 Java服务器端编程的不同之处 1079\r\n26.1.1 Java语言 1079\r\n26.1.2 应用运行于服务器 1080\r\n26.1.3 运行过程时间长 1081\r\n26.1.4 健壮性和稳定性 1083\r\n26.1.5 多用户/多线程 1085\r\n26.1.6 性能 1087\r\n26.2 调试工具和技术 1088\r\n26.3 小结 1101\r\n第27章 单元测试J2EE应用 1103\r\n27.1 单元测试的概念 1103\r\n27.2 JUnit框架介绍 1105\r\n27.3 使用JUnit框架 1105\r\n27.4 如何进行单元测试 1106\r\n27.4.1 单元测试步骤 1107\r\n27.4.2 编写可测试代码 1108\r\n27.4.3 进行单元测试的原因 1108\r\n27.5 简单对象的单元测试 1109\r\n27.5.1 单元测试一个实用对象 1109\r\n27.5.2 单元测试一个事务对象 1115\r\n27.6 单元测试servlet 1121\r\n27.7 单元测试数据库访问层 1130\r\n27.8 单元测试JSP 1131\r\n27.9 单元测试EJB和RMI对象 1132\r\n27.10 小结 1136\r\n第28章 Java消息服务 1137\r\n28.1 消息系统 1137\r\n28.2 JMS编程 1138\r\n28.2.1 发布和预定编程 1139\r\n28.2.2 点到点编程 1143\r\n28.2.3 消息 1145\r\n28.2.4 JMS编程技术和问题 1147\r\n28.3 JMS实现 1153\r\n28.4 一个示例应用 1154\r\n28.4.1 代码简介 1154\r\n28.4.2 运行此应用 1159\r\n28.5 JMS基于消息的集成 1159\r\n28.5.1 将JMS和XML作为一种集成平台 1160\r\n28.5.2 集成的体系结构模式 1160\r\n28.5.3 超越集成—设计开放式应用 1162\r\n28.6 小结 1162\r\n第29章 与CORBA的集成 1163\r\n29.1 本章使用工具 1163\r\n29.2 CORBA简介 1163\r\n29.3 IDL入门 1180\r\n29.3.1 基本IDL类型 1180\r\n29.3.2 复杂IDL类型 1180\r\n29.3.3 模块 1181\r\n29.3.4 接口 1181\r\n29.3.5 属性 1182\r\n29.3.6 操作 1182\r\n29.3.7 异常 1183\r\n29.3.8 继承 1184\r\n29.4 J2EE和CORBA 1184\r\n29.5 与J2EE集成 1195\r\n29.5.1 servlet和CORBA对象 1196\r\n29.5.2 JavaServer Page和CORBA对象 1204\r\n29.5.3 EJB和CORBA对象 1208\r\n29.5.4 J2EE用做CORBA客户端简介 1215\r\n29.6 小结 1216\r\n第30章 结合在一起的J2EE应用 1217\r\n30.1 J2EE应用 1217\r\n30.1.1 J2EE模块 1217\r\n30.1.2 应用部署描述器 1218\r\n30.1.3 J2EE应用结构 1220\r\n30.1.4 为什么J2EE应用有些麻烦 1221\r\n30.1.5 J2EE应用的前景 1221\r\n30.2 设计一个J2EE应用 1222\r\n30.3 应用开发周期 1224\r\n30.4 创建一个完整的J2EE应用 1224\r\n30.4.1 需求 1225\r\n30.4.2 设计 1225\r\n30.4.3 组件实现 1226\r\n30.4.4 组件打包/汇编 1232\r\n30.4.5 应用汇编 1234\r\n30.4.6 应用部署 1238\r\n30.4.7 运行应用 1242\r\n30.4.8 使用其他的应用服务器 1243\r\n30.5 小结 1244\r\n附录A 配置Tomcat和JRun 1245\r\n附录B 建立Netscape iPlanet目录\r\n 服务器 1256\r\n附录C HTTP参考 1268\r\n附录D 国际化 1278\r\n附录E Swing HTML生成 1300\r\n附录F 支持. 勘误和P2P.Wrox.Com 1333\r\n \r\n
\r\n
Java作为一种新型语言面世时间虽仍很短暂, 但由于其独具的魅力, 日益受到广大企业应用开发者的青睐, 与之相关的技术层出不穷. Sun公司力图使Java不仅仅是作为一种有生命力的语言来发展, 更重要的是, 要将其作为一种有生命力的企业开发平台. Java服务器端技术涵盖的内容极其丰富, 而J2EE的目标就是把在企业级开发中最基本的. 而又显得零散的. 低层次的语义封装到一个基于包容器的体系结构中, 从而使开发者将其主要工作集中于编写与之密切相关的业务逻辑部分, 进而减少了巨大的工作量.
本书首先介绍了J2EE体系结构中采用的基本技术:RMI. JDBC. JNDI和XML, 然后通过servlet开发的Web组件实例进行详细讲述, 进而介绍了JSP利用上述技术创建动态Web内容的方式以及EJB的复杂组件开发技术, 最后介绍了一些在企业领域开发过程中涉及的与安全性. 性能. 可扩展性. 与其他非Java技术的集成等相关问题.
本书内容丰富, 技术新颖, 实例分析紧密结合所学内容, 是当前Java服务器端技术前沿领域最新版的技术大全, 编程者在实践工作中可能会不自觉地用到本书内容.
本书涉及内容较深, 一般面向专业级的Java程序员, 要求熟悉网络和Web程序设计的基本概念, 另外, 读者也应当熟悉Java语言和其核心API. 读者最好熟悉一些基本的Java服务器端技术. 因为, 本书包含了许多这方面的内容, 不能保证其中所涉及的所有概念都被完全阐述.
感谢闻道工作室的同事们这几个月的辛勤努力, 由于时间仓促, 难免有些译文不够精确, 希望读者在阅读本书时能够提出宝贵意见, 在J2EE的后续版本中我们会不断加以改正.
Subrahmanyam Allamaraju
Subrahmanyam是BEA Systems的Senior Engineer. 他获得了电子工程专业博士学位, 主要的兴趣在于面向对象的程序设计建模, 并且致力于分布式计算和软件体系结构的领域. 在他的工作历程中, 他先在Indian Institute of Technology, 然后到了Computervision和Wipro Infotech, 后来到了BEA Systems. 有关他在工作方面当前的活动请见http://www.Subrahmanyam.com.
Karl Avedal
自从1995年公开发布Java语言之后, Karl Avedal就一直是一个Java开发者. 随着像servlet这样的Java服务器端技术的发展, 他在1
欢迎阅读本书. 对于那些阅读过本书第一版的读者来说, 他们会发现许多内容都有了变化, 而本书距第一版出版时间仅仅一年.
J2EE版
在Java服务器端技术发展中, 最显著的变化也许就是Java 2平台企业版的发布(Java 2 Platform, Enterprise Edition, J2EE).
J2EE代表了一系列的发展过程, 在这个过程中, Sun公司力图使Java不仅仅是作为一种有生命力的语言来发展, 更重要的是, 要作为一种有生命力的企业开发平台来发展. 通过本书, 可以看到, J2EE并不是一个简单的API的集合, 而是定义了一个运行时的体系结构, 并用在开发中. 这种体系结构对于企业级Java应用开发者而言, 它的美妙之处在于, J2EE的主要目标是:通过把在企业级开发中最基本的而又显得零散的. 低层次的语义(如连接池和各种事务)封装到一个基于包容器的体系结构中. 从而, 开发者要去做的工作就是继续编写业务逻辑部分.
因此, 这一版不是对第一版的简单更新, 而是使得其中的内容完全可以反映出目前有关Java服务器端开发技术的发展变化的状况.
本书面向的读者
本书是面向专业级的Java程序员, 读者不必具备丰富的实践经验, 但至少要熟悉网络和Web程序设计的基本概念. 另外, 也应当熟悉Java语言和核心API—关于这方面的内容请阅读Ivor Horton的《Beginning Java 2》, 或者其他相似内容的初级书籍. 但无论如何, 本书中所有与Java服务器端程序设计有关的概念都会被阐述, 并不需要预备知识.
另外要说的是:读者最好熟悉一些基本的Java服务器端技术. 因为, 本书包含了许多这方面的内容, 不能保证其中所涉及的所有的概念都能被完全阐述.
本书包含了什么
在本书中, 讨论了以下三个方面的内容:
?开发者在编写企业级组件时要遵循的技术规范中的规则.
?在现实世界中, 典型厂商在实现J2EE时所做的补充和限制.
?通过使用J2EE技术, 现实中的设计所带来的实践结果.
本书的基本结构如下:
?本书从对Java企业级开发者的最新的要求和Java(具体说是J2EE)是如何发展来满足这些方面的挑战开始的. 从中可以了解到J2EE包容器体系结构的初始概貌.
?在讨论了J2EE体系结构后, 阐述了一些在企业级开发中采用的基本技术:RMI. JDBC. JNDI和XML.
?然后, 通过使用Java Servlet开发Web组件来更具体地讲述J2EE.
?理解掌握了Servlet技术后, 就可以学习JSP(JavaServer Page)是如何应用该技术. 进而能够提供更为灵活的创建动态Web内容的方式.
?接下来, 就是通过讲述有关EJB的复杂组件技术来阐述企业级开发.
?讨论了在J2EE中的三种组件技术之后, 本书继续阐述在企业领域开发中要涉及的一些问题, 如安全性. 性能和可扩展性.
?最后, 讨论了如何把Java应用与其他非Java技术, 如COM和CORBA集成起来, 如何运用Java消息服务(Java Message Service)来进行基于消息的集成.
在本书的附录部分, 包含了一些使用的内容, 其中有介绍如何配置和安装所需要用的软件, 另外, 还涉及到了软件国际化等一些主题.
本书中绝大部分代码在Java 2平台. 标准版SDK(JDK 1.3)和Java 2 Platform. Enterprise Edition SDK1.2.1 Reference Zmplementation环境中经过测试. 但是, 在本书许多章节, 这两个引用环境还不够, 需要其他的软件, 如:
Web包容器
为了运行本书中的Web组件, 需要一个支持Servlet 2.2和JSP 1.1规范的Web包容器, 可以采用:
?包含Tomcat3.0的J2EE RI, 书中用到了Tomcat 3.1中的一些特征而在3.0中不支持. http://www.apache.org/.
?Allaire的JRUN3.0, http://commerce.allaire.com/download/.
参照附录A中的安装和配置指南.
EJB包容器
在EJB章节里面, 需要一个支持EJB 1.1规范的EJB包容器, 采用:
?jBoss 2.0 Application Server, http://www.jboss.org.
?Orion Application Server, http://www.orionserver.com.
本书中还有一章涉及到了EJB 2.0规范. 但是, 该规范还处在公开的起草阶段, 还没有被广泛实现. 少数的应用服务厂商, 如BEA, 已经在他们的应用服务器上实现了一个支持目前草案规范的beta版patch, 但请注意, 在规范最终形成前, 什么事情都有可能改变.
数据库
有几部分章节需要访问数据库. 在这些章节中, 用到了下面一些数据库:
?Cloudscape(随J2EE RI带有一个进程内版), http://www.cloudscape.com.
?Microsoft Access 2000.
?Microsoft SQL Server.
?HypersonicSQL, http://hsql.oron.ch/.
其他的软件
最后, 一些章节还需要的几个软件有:
?Sun公司的JNDI SDK, 在JDK1.3中包含有.
?XML分析器和XSLT引擎—James Clark的xp和xt, http://www.jclark.com/xml.
?用于Java API for XML(JAXP), http://java.sun.com/xml.
?IBM的XML分析器和Lotus的XSL处理器, http://alphaworks.ibm.com.
?Xalan的XSLT处理器和Xerces的XML Parser, http://xml.apache.org.
?Java Secure Sockets Extension(JSSE), 1.0.1, http://java.sun.com/products/jsse/.
?Allaire Tag Library, http://commerce.allaire.com/download/.
?LDAP服务器—Netscape的iPlanet Directory Server version 4.11, http://www.iplanet.com.
?消息服务器—SonicMQ, http://www.sonicmq.com.
?单元测试框架—JUnit, http://www.junit.org.
?SMTP和/或POP3服务.
本书中的代码可以在单机上运行, 要具备网络环境(也就是, 可以通过本地浏览器访问http://localhost).
书中的所有源代码可以从下面的站点下载:
http://www.wrox.com
英文原书ISBN:1-861004-65-6