本书分为5个部分,第1部分是技术背景,介绍了EJB、servlet和JSP等所依赖的J2EE或服务器端底层技术。第2部分是EJB体系结构。第3部分是Servlet和JSP,它们构成了J2EE应用程序的表示层或Web层。第4部分是其他一些高级技术,包括J2EE事务、EJB安全性、Web服务和SVG。第5部分是设计。讲解了J2EE应用程序的设计和Sun的J2EE模型目录中的设计模式。
本书适用于想学习J2EE技术以更好地构建企业级应用的开发人员。
第1部分 技术背景
第1章 使用J2EE的原因
1.1 引言
1.2 1T组织面临的挑战
1.3 企业级应用程序开发的需求
1.4 技术选择
1.5 选择Java和J2EE的理由
1.6 警告说明
1.7 其他内容
1.8 参考文献
第2章 分布式系统入门
2.1 分布式应用程序或系统的概念
2.2 构建分布式程序的理由
2.3 Java对分布式程序的作用
2.4 分布式对象系统
2.5 J2EE的作用
2.6 在线参考文献
第3章 J2EE漫游
3.1 引言
3.2 J2EE平台
3.3 J2EE技术漫游
3.3.1 通信服务
3.3.2 通用服务
3.3.3 组件技术
3.4 参考文献
第4章 Java和远程方法调用
4.1 引言一
4.2 远程方法调用(RMl)
4.2.1 远程接口
4.2.2 子类化服务器类
4.2.3 运行rmic编译器
4.2.4 启动注册表
4.3 RMIClient类
4.4 RMI的性能
4.5 参数传递
4.6 在线参考文献
第5章 可激活的服务器
5.1 引言
5.2 扩展RMI
5.3 实现可激活的服务器
5.3.1 远程接口
5.3.2 Client类
5.3.3 可激活的服务器
5.3.4 服务器设置
5.4 运行可激活的客户机朋艮务器
5.5 小结
5.6 在线参考文献
第6章 JNDI
6.1 引言
6.2 使用JNDI的必需条件
6.3 LDAP
6.4 LDAP的功能
6.5 使用LDAP
6.6 使用JNDI
6.7 在LDAP中保存数据
6.8 JNDI、RMI和LDAP
6.9 小结
第7章 Java消息服务(JMS)
7.1 引言
7.2 消息服务器和JMS
7.2.1 什么是消息服务
7.2.2 为什么使用消息服务
7.2.3 什么是JMS
7.2.4 JMSAPl概念
7.3 点对点通信
7.4 发布/订阅通信
7.5 JMS API
7.5.1 连接工厂
7.5:2 连接
7.5.3 会话
7.5.4 消息
7.5.5 目标
7.5.6 消息生产者
7.5.7 消息消费者
7.6 点对点应用程序的开发步骤
7.6.1 发布目标
7.6.2 定义客户端
7.6.3 定义接收消息的客户端
7.6.4 启动消息服务器
7.6.5 编译并启动客户端
7.7 发布/订阅应用程序的开发步骤
7.7.1 发布主题
7.7.2 定义发布者客户端
7.7.3 定义订阅者客户端
7.7.4 启动消息服务器
7.7.5 编译并启动客户端
7.8 其他的JMS特性
7.8.1 指定消息的持久性
7.8.2 设置消息优先级
7.8.3 定义消息持续的时间
7.8.4 持久订阅
7.8.5 主题消息选择器
7.8.6 客户端验证
7.8.7 事务
7.9 小结
7.10 在线参考文献
第8章 Java、IDL和ORB
8.1 引言
8.2 CORBA
8.3 JavaIDL
8.3.1 JavaORB
8.3.2 Java命名服务器
8.3.3 将IDL转化成Java
8.3.4 实现服务器
8.3.5 实现客户端
8.3.6 编译服务器和客户端
8.3.7 运行应用程序
8.3.8 JavaIDL和RM卜
8.4 在线参考文献
第9章 Java数据库连接
9.1 引言
9.2 什么是JDBC
9.3 驱动程序提供的内容
9.4注册驱动程序
9.5 打开连接
9.6 从数据库中获取数据
9.7 创建表
9.8 applet和数据库
9.9 以批处理方式更新
9.10可滚动和可更新的ResultSet
9.11 可更新的ResultSet
9.12 JDBC数据源
9.13 连接池
9.14 RowSet对象
9.15 JDBC元数据
9.15.1 DatabaseMetaData
9.15.2 ResultSetMetaData
9.16 在线参考文献
9.17 参考文献
第10章 XML和Java
10.1 引言
10.2 XML介绍
10.2.1 什么是XML
10.2.2 XML文档
10.2.3 XML词汇表
10.2.4 使用DTD
10.3 XSL转换
10.4 处理XML
10.5 JAXPAPI
10.6 SAXAPl
10.7 DOMAPI
10.8 载入XML文档
10.9 在Java中创建XML文档
10.10 在JAX中使用XSLT
第11章 JavaMailAPl:Mail在其中
11.1 引言
11.2 JavaMailAPI
11.3 安装JavaMail
11.4 发送Email
11.5 接收消息
11.6 回复消息
11.7 多部分的MIME消息
11.8 把原始文本加入回复邮件
11.9 邮件转发
11.10 发送附件
11.11 发送HTML
11.12 小结
11.13 在线参考文献
第11部分 EJB体系结构
第12章 EJB体系结构
12.1 引言
12.2 EJB服务器的组成元素
12.3 EJB组件的组成元素
12.3.1 本地接口和远程接口
12.3.2 在“坚果壳”(指容器)中开发和部署EJB~H.件的过程
12.3.3 EJB组件类和接口
12.4 从应用程序客户机访问EJB
12.5 参考文献
第13章 无状态会话EJB
13.1 引言
13.2 无状态会话EJB的生命周期
13.3 无状态会话EJB'的开发过程
13.4 业务逻辑接口
13.5 生命周期接口
13.6 组件类
13.6.1 SessionComem对象+
13.6.2 为什么组件类不“实现”业务或生命周期接口
13.7 部署描述符文件
13.7.1 ejb-jar.xml文件
13.7.2 JBoss中的扣oss.xml文件
13.8 部署EJB组件
13.9 从Java应用程序客户机访问EJB
第14章 实体EJB:如何实现容器管理的实体EJB
14.1 引言
14.2 实体EJB生命周期
14.3 开发实体EJB的过程
14.4 业务逻辑接口
14.5 生命周期接口
14.5.1 Creator方法
14.5.2 find方法
14:5.3 Home方法
14.5.4 Select方法
14.6主键和主键类
14.7 组件类
14.8 部署描述符文件
14.8.1 ejb-jar.xml文件
14.8.2 JBossjboss.xml文件
14.8.3 JBoss jbosscmp-jdbc.xml文件
14.9 EJB查询语言
14.9.1 查询语言语句
14.9.2 部署描述符
14.10 从Java应用程序客户机中访问EJB
14.11 容器管理关联
14.11.1 在组件类中声明容器管理关联
14.11.2 关联部署描述符
14.11.3 Jboss jbosscmp-jbc.xml文件
14.12 参考文献
第15章 集成EJB
15.1 引言
15.2 BOokStoreEJB间的交互
15.3 环境命名上下文(ENC)
15.4 集成EJB时需要考虑的一些设计问题
15.4.1 作为界面的会话EJB
15.4.2 在EJB中使用JNDI
15.4.3 不用实体EJB的时候
15.4.4 组件类和业务逻辑接口一致性的编译期检查
15.4.5 通过使用bulkaccessor/updator方法提高性能
15.5 CartEJB程序清单
15.6 计时器服务’
第16章 消息驱动的EJB
16.1 引言
16.2 消息驱动EJB的生命周期
16.3 组件类
16.4 部署描述符文件
16.4.1 ejb-iar.xml文件
16.4.2 ejb-jar.xml文件(EJB 2.1)
16.4.3 JBoss的jboss.xml文件
16.4.4 JBOss的JBoss-destinations-service.xml文件
16.4.5 连接到JMS主题的DebugMonitor
16.5 从其他的EJB访问MDB
第III部分 ServLets和JSP
第17章 JavaWeb应用
17.1 引言
17.2 什么是Servlet
17.3 Web应用
17.4 Web应用的结构
17.5 Servlet的工作原理
17.6 为什么使用servlet
17.7 ServletAPI的结构
17.8 开发和部署Web应用的步骤
17.9 启动Tomcat'
17.10 第二个serlvet示例
17.11 选择dOGet还是dOPost
17.12 Tomcat-
17.13 小结
17.14 在线参考文献
17.15 参考文献
第18章 会话管理和生命周期监控
18.1 引言
18.2 会话管理
18.3 会话跟踪
18.3.1 URL重写
18.3.2 隐藏字段
18.3.3 安全套接字层会话
18.3.4 COOkies
18.3.5 选择会话跟踪的方法
18.4 会话示例
18.5 更多的会话细节
18.6 会话状态
18.7 会话生命周期监控
18.8 servlet上下文
18.9 ServletContext示例
18.10 servlet生命周期事件
18.11 参考文献
第19章 JSP
19.1 引言
19.2 什么是JSP
19.3 简单的JSP
19.4 JSP的组件
19.4.1 指令
19.4.2 动作
19.4.3 隐式对象
19.4.4 JSP脚本
19.5 使JSP具有交互性
19.6 为什么使用JSP
19.7 JSP的问题
第20章 JSP标记和隐式对象
20.1 引言
20.2 JSP标记
20.2.1 JSP指令
20.2.2 脚本元素
20.2.3 动作
20.3 隐式对象
20.4 作用域
第21章 JSP标记库
21.1 引言
21.1 为什么使用标记库
21.3 关键概念
21.4 创建定制标记
21.5 Tag接口
21.6 创建标记库
21.6.1 实现标记处理程序类
21.6.2 定义标记库描述符
21.6.3 映射标记库
21.6.4导入标记库
21.6.5 运行Web应用
21.7 为标记添加特性
21.8 包含正文内容
21.9 开发标记库的原则
21.10 引入脚本变量
21.11 嵌套标记
21.12 标记验证
21.13 处理标记异常
21.14 JSTL
21.15 小结
21.16 在线参考文献
第22章 请求调度
22.1 引言
22.2 ServletChaining
22.3 请求调度
22.4 获取RequestDispatcher
22.4.1 转发请求
22.4.2 转发的示例
22.4.3 通过请求调度实现包含
第23章 过滤
23.1 引言
23.2 什么是过滤器
23.3 过滤器能做些什么
23.4 过滤器API
23.5 实现一个简单的过滤器
23.6 日志过滤器示例
23.7 包装请求和响应对象
23.8 过滤XML来生成HTML
第24章 Web应用程序安全化
24.1 引言
24.2 传统的方法
24.2.1 使用Web服务器
24.2.2 DIY
24.3 容器管理的安全性
24.3.1 定义用户
24.3.2 配置对Web资源的访问
24.3.3 身份验证的4种类型
24.4 程序化的安全性
24.5 配置JSP文件
24.5.1 启用或禁用EL评估
24.5.2 启用或禁用脚本
24.5.3 页面编码的声明
24.5.4 定义隐式包含
24.6 小结
24.7 在线参考文献
第25章 部署配置
25.1 引言
25.2 上下文初始化
25.3 servlet初始化
25.4 servlet加载
25.5 会话配置
25.6 欢迎页面
25.7 错误页面
25.8 MIME映射
25.9 分布式应用程序
25.10 J2EEl.3中的部署描述符
25.11 在J2SEl.4中部署J2EE应用程序
第26章 从SorvloUJSP中访问EJB
26.1 引言
26.2 EJB的客户端访问
26.3 从Web应用程序访问EJB
26.3.1 Web归档
26.3.2企业级归档
26.4 缓存EJB引用
26.5 示例
26.6 小结
第1V部分 其他技术
第27章 部署要点:事务
27.1 引言
27.2 事务的概念
27.3 EJB服务器支持的事务类型
27.4 容器管理的事务
27.4.1 Required特性
27.4.2 NotSupported特性
27.4.3 Supports特性
27.4.4 RequiresNew特性
27.4.5 Mandatory特性
27.4.6 Never特性
27.4.7 事务部署描述符
27.5 Bean管理的事务
27.5.1 User-Transaction接口
27.5.2 UserTransaction对象的获取和使用
27.6 事务隔离等级
27.6.1 锁模式
27.6.2 指定隔离等级
27.7 事务及异常事件
27.8 参考文献
第28章 部署要点:安全性
28.1 引言
28.2 安全概念和体系结构
28.2.1 身份验证
28.2.2 访问控制(授权)
28.3 EJB容器管理的安全性
28.3.1 声明的安全性
28.3.2 程序化安全性
28.3.3 利益相关者的责任
28.4 Java身份验证和授权服务(JAAS)的使用实例
28.5 参考文献
第29章 Bean管理的持久性
29.1 引言
29.2 再谈实体EJB生命周期
29.3 BooklternEJB:BMP版
29.4 部署描述符文件
29.5 从客户端访问BooklternBMP实体
第30章 有状态会话EJB
30.1 引言
30.2 有状态会话EJB的生命周期
30.3 实现类中可容许的实例变量的规则
30.4 有状态会话EJB的开发过程
30.4.1 PurchaseEJB的业务逻辑接口
30.4.2 PurchaseEJB的生命周期接口
30.4.3 PurchaseEJB组件类
30.5 使用SessionSynchronization接口的事务同步化
30.6 部署描述符文件
第31章 J2EE连接器体系结构
31.1 引言
31.2 体系结构概述
31.3 连接服务
31.4 事务服务
31.5 安全服务
31.6 通用客户端接口(CCl)
31.7 部署资源适配器
31.8 参考文献
第32章 从Java到SVG
32.1 引言
32.2 SVG的概念
32.2.1 SVG的优点
32.2.2 SVG的缺点
32.3.3 获得SVG查看器
32.2.4 SVG的形式
32.3 使用Java创建SVG
32.3.1 使用DOMAPI
32.3.2 将XML转换成SVG
32.4 Batik的使用
32.4.1 SVG查看器
32.4.2 SVG光栅器
32.4.3 SVG生成器:从Java图形生成SVG内容
32.4.4 SwinaDraw程序
32.5 Sewlet和JSP
32.6 小结
32.7 在线参考文献
32.8 附录:SVGCreatOr.java
第33章 Web服务
33.1 引言:
33.2 Web服务的概念
32.2.1 SOAP的概念
33.2.2 带附件的SOAP
33.2.3 WSDL的概念
33.2.4 UDDI的概念
33.3 Axis的概念
33.4 基于AxisWeb月艮务的客户端
33.5 创建简单的Web服务驱动程序
33.5.1 为Web服务设置Tomcat'
33.5.2 创建简单的Web服务
33.5.3 配置Web服务
33.5.4 WSDL的作用
33.6 JavaWeb服务开发包
33.7 Java的带附件SOAPAPI
33.8 Web服务和J2EE
33.9 小结
33.10 参考文献
第V部分 设计
第34章 J2EE模式
34.1 引言
34.2 模式背后的动机
34.3 设计模式
34.3.1 什么是设计模式
34.3.2 设计模式不是什么
34.3.3 体系结构模式
34.3.4 归类模式
34.3.5 何时使用模式
34.3.6 设计模式的优点及限制
34.4 什么是J2EE设计模式
34.5 J2EE模式目录
34.6 FrontController模式
34.6.1 上下文
34.6.2 问题
34.6.3 强制性
34.6.4 解决方案
34.6.5 策略
34.6.6 结果
34.6.7 相关模式
34.7 请求-事件—调度程序模式
34.7.1 上下文
34.7.2 问题
34.7.3 强制性
34.7.4 解决方案
34.7.5 策略
34.7.6 结果
34.7.7 相关模式
34.8 基于J2EE的模型—视图—控制器
34.8.1 上下文
34.8.2 问题
34.8.3 强制性
34.8.4 解决方案
34.8.5 策略
34.8.6 结果
34.8.7 相关模式
34.9 小结
34.10 进阶阅读材料
34.11 参考文献
第35章 故障跟踪J2EE案例研究
35.1 引言
35.2 故障跟踪应用
35.2.1 变更请求
35.2.2 问题报告
35.3 使用故障跟踪系统
35.4 故障跟踪系统的设计
35.5 小结和结论
0.1 本书的目的
本书旨在为所有需要了解Java2EnterpriseEdition(J2EE)技术应用程序的设计、实现、部署和运行的读者作实用性介绍。J2EE应用程序建立在Java2StandardEdition(J2SE)提供的技术之上,它使用servlet、JavaServerPage(JSP)、EnterpriseJavaBean(EJB)或其他一些服务器端技术(如Java消息服务)。
编写本书的目的十分明确。在过去的3年里,我们为各种各样的开发人员培训J2EE技术,既有业界的也有学术界的人士。我们还参与了几个大型J2EE技术应用程序的设计、实现和部署。在此期间,我们发现还没有一本书能够连贯紧凑地从整体的角度宋介绍J2EE技术。
当然,我们试过寻找一本既可以用于我们的课程又值得推荐的书。我们发现能找到的书通常分为两种类型:或者集中在J2EE的某个方面(如servlet/JSP或EJB);或者看起来像一本工具书,适合在需要的时候查阅一下,而不适合逐页阅读。这就意味着如果想要全面学习J2EE技术的各个方面,您就必须参加课程培训、买很多本书或翻阅大型工具书,这些工具书在每章中都包含大量重复信息。
而本书解决了上述问题,它提供了对J2EE几乎所有方面的介绍。由于篇幅有限,本书不像专门的EJB书籍那样对EJB进行详细介绍,但是涵盖了一般项目中需要的大多数信息。其他的内容可以从J2EE提供的EJB文档或从Sun和其他网站上的技术指南中得到(例如
http://www』avaworld.com/和http://www.planeUava.co.uk/)。对于servlet和JSP也是如此。
0.2 使用Tomcat和JBOSS的理由
还有一个值得考虑的问题是,为什么要选择Tomcat和JBoss分别作为Web应用程序服务器和EJB应用程序服务器。答案相当简单:我们想使用免费的服务器。但是,我们又希望这些服务器是具有产品级质量的服务器,它们可以并且已经在真实的系统中应用了。Tomcat和JBoss都是免费的服务器,因此,选择它们是很自然的,而且Tomcat是Sun公司官方推荐的Web应用程序服务器。
Tomcat
Tomcat是Apache的Jakarta项目的一部分。Jakarta项目创建并维护Java平台上的开放源代码。它通过其中的各个子项目来开发和发布独立的产品,Tomcat就是Jakarta项目中的一个子项目。每个子项目都有自己的开发团队和组织,以及自己的邮件列表和讨论组。
Tomcat是在一个开放和共享的环境中开发的,在Apache软件许可证下发布。它是当今应用最广泛的Java Web应用程序服务器之一。它还是Sun公司的Servlet和JSP规范的参考实现。
本书使用的版本是Tomcat4.0.3,它支持Servlet2.3规范和JSPl.2规范。访问下面的URL可以从Apache获得Tomcg:
http://jakarta.apache.org/tomcat/index.html
Tomcat5.0将支持J2EESDKl.4版本。但是,在编写本书时该版本正处于开发阶段,还没有广泛使用。该版本的Tomc~将支持Servlet2.4和JSP2.0规范。
JBoss
JBoss是一个开放源代码、符合标准的应用程序服务器,它由百分百的纯Java实现并免费发布。2002年中每月有超过15万次的下载量,JBoss是基于J2EE规范的领域中下载最多的Web应用程序服务器。在由TogetherSoft进行的民意调查中,当问及企业开发中使用哪个J2EE服务器时,有44%的被调查者选择了JBoss,而其最强劲的对手BEA Weblogic只有23%(参见http://www.togethercommunity.com/index』sp)。JBoss还赢得了((JavaWorld))的编辑选举的2002年最佳Java应用程序服务器奖。因此,虽然JBoss是开放源代码,但它仍然是当前使用最广泛的J2EEEJB应用程序服务器。注意,JBoss还提供了JNDI、Java消息服务和分布式事务等的实现。它还包含一个简单的关系型数据库Hypersonic。
当JBoss与Tomcat结合起来时,它提供一个完整的J2EE库,也就是说,它不仅提供了对EJB服务器的支持,而且提供了对servlet和JSP的支持。因此,拥有JBoss与Tomc~就足够了。本书所用的版本是JBoss 3.0.0。
访问下面的地址可以下载独立的JBoss(或内置Tomcat的JBoss):
http://www.jboss.org/
JBoss与Tomcat的版本
因为JBoss与Tomc~的版本可能有一些不同的部署要求或存在目录结构方面的变化,我们把本书所用的版本都放在了本书的专门网站上。代码的可移植性
值得注意的重要一点是,基于J2EE的应用程序应该是跨服务器的。就是说,如果开发人员遵循J2EE准则,源代码应该可以在任何J2EE服务器中工作。这就意味着运行在WebSpehere中的源代码同样可以运行在JBoss/Tomcat或WebLogic中。因此,本书选择JBoss Tomcat组合并不代表您不能够使用其他服务器提供的素材(虽然源代码的部署方式可能有所不同)。
0.3 本书的Web站点
我们已经开发了本书的专门网站,其中包含书中的素材,网站的URL是:
http://www.guide-to-j2ee.net/
我们相信,软件开发人员通过实际操作以及从一些可用代码和试验入手都可以学得很好。因此,本书例子中的所有源代码都放到网站上。每章都有自己的目录, 目录下列出每一个类文件。源代码都用Tomcat4.0.3andJBoss 3.0上的Java2企业版(SDKl.3.1)测试过。当新版本的J2EE发布时,所有的例子将用Tomc~和JBoss的相应版本进行测试。本书的网站将会记录所有新版本带来的必要改变。
如前所述,网站中也有本书例子所用的Tomcat和Jboss的版本。
网站提供的内容如下:
●书中使用的Tomcat和JBoss的版本。
●本书中用到的所有源代码、XML文件、JSP和HTML文件。
●对应最新版Servlet/JSP或EJB规范所做的所有必要的更新。
0.4 本书结构
本书分为5个部分。
第1部分:技术背景
这部分说明EJB、servlet和JSP等所依赖的J2EE或服务器端底层技术。因此,这部分涉及到JDBC、RMI、JNDI和XML这类主题。
第2部分:EnterpriseJavaBean
在这部分介绍EnterpriseJavaBean(EJB)。EJB是用于表现应用程序业务逻辑、持久性数据,并通过消息驱动bean表现面向消息的逻辑的J2EE技术‘
第3部分:Servlet和JSP
J2EE应用程序的表示层或Web层由Servlet和JSP构成。因此,这一部分描述了这些技术及Web应用程序安全化等相关的问题。
第4部分:其他技术
· 这一部分介绍一些高级J2EE技术,包括J2EE事务、EJB安全性、Web服务和SVG(可伸缩向量图形,一种XML技术)。
第5部分:设计 。
这部分描述J2E'E应用程序的设计和Sun的J2EE模式目录中的设计模式的使用。
0.5 商标
Java、Java 2 Standard Edition、Java 2 Enterprise Edition、Java Development Kit、Solaris、SPARC、SunOS和Sunsoft是SunMicrosystems公司的商标。MS-Windows和Windows 95、98、2000、NT和XP是Microsoft公司的注册商标。Unix是AT&T的注册商标。其他所有的商标名都是各自所有人的商标。