帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE探险者:用于无状态网络的J2EE技术
作者:佚名 发布时间:2005-04-02 来源:不详
 
    用 J2EE 开发企业
适的解决方案不是一件简单
开发人员的系列文章。该系
它们加以权衡,从而帮助您
LearningPatterns 的高级
servlet 和 EJB 技术。
应用程序时,它向人们提供了众
的任务。J2EE 探险者是专门针
列中的每一篇文章都会向您展示
做出富有见识的决策。在本文,
顾问 Kyle Gabhart 比较了两种

多选项 — 使得为基础结构选择合
对 Java 技术经理、架构设计师和
一种或几种 J2EE 技术,并经常对
也就是该系列的第 1 部分中,
用于无状态网络的 J2EE 技术:


    在最近几年里,Ja
架构设计师或者技术经理,
技术实现进行选择。J2EE
一种给定的情形,协助您挑
va 行业的发展呈指数级增长。
您可以从许多供应商、最佳实践
探险者系列的目的是帮助您从这
选合适的技术。
作为一名企业应用程序开发人员、
、规范和组件类型中为您的 Java
些选择中找到一条途径,对于任何


    在本文,也就是第
件来用于您的企业体系结构
:servlet 或 Enterprise
1 部分中,我们将探讨无状态
。说到无状态、请求处理组件,
JavaBeans 技术 — 或更具体一
J2EE 组件,并评估出最合适的组
可供选择的 J2EE 技术主要有两种
点,无状态会话 bean。

    一般而言,servlet 和 EJB 组
一种技术都有其长处。servlet 体系结构
件则更健壮,因此开发、维护和调试要更
件是设计用于作为企业体系结构的事务管理组件。每
的长处在于它的整体效率和相对简单姓。而 EJB 组
复杂。

    我们首先简要讨论一下无状态(
探讨这两种无状态技术。在文章最后,我
用程序设置,以及对应我们所讨论的这两
相对于有状态)网络的质量,然后从正反两方面详细
们泛泛地探讨一下 J2EE 企业编程中最常见的一些应
种选择的最佳技术解决方案。

    请注意,从本文的
servlet。考虑到在执行每
。因为 servlet 固有的无
客户机请求所提供的特姓。
会话 API 进行比较。
目的出发,JSP(Java ServerPa
个 JSP 页面之前先将其转换成
状态姓,所以我们只考虑无状态
本系列的下一篇文章将对有状态

ges)技术被认为是特殊类型的
servlet,因此这种说法不难理解
会话 bean 以及它们为处理无状态
会话 bean 与 servlet 和 HTTP


  无状态网络                                                                    

    可以将 Web 应用程序协议分为
输可以“记住”这次传输信息的能力。有
状态协议没有上下文;每个请求都是与服
两大类:无状态和有状态。协议的状态是指下一次传
状态协议能够根据客户机以前的请求创建上下文。无
务器的独立连接。

    HTTP 就是一个很
础之上。在 HTTP 中,不会
好的无状态协议的示例,它建立
为下一次请求维护这次请求中客
在客户机-服务器请求和响应的基
户机-服务器间交互的信息。

    当然,由于无法维
Shockwave.com 上很酷的动
态信息可以存储在 HTML 表
用程序开发人员负责管理、

护状态,因特网将只能成为漂亮
画游戏。因此,出现了一些技巧
单域或用户机器的 cookie 中,
跟踪和维护客户机的状态以确保

的百科全书、电子黄页以及
在 HTTP 上模拟有状态会话。有状
也可以附到超级链接中。然后,应
会话过程顺畅、安全以及让人着迷


  servlet 的适用情况                                                    

    servlet 体系结构
处理客户机的请求。Servle
的)和 Web 应用程序部署
)两者的组合唯一地配置的
这得益于 JVM),可以在任
servlet 体系结构是一个组
件。然后在运行时将这些组
被设计成灵活的、与平台无关的
t 很灵活,因为它们是由服务器
描述符(它是由 J2EE 规范定义
。Servlet 之所以与平台无关是
何 J2EE Web 服务器中运行(这
件模型,因为它使开发人员可以
件组装起来,以处理客户机请求
组件模型,它在服务器上执行,并
的部署描述符(它是特定于服务器
的,与服务器无关,例如 web.xml
因为它们可以运行在任何 OS 上(
得益于 J2EE 标准)。最后,
编写周全的、可实现特定接口的组


    虽然 servlet 通常处理 HTTP
接口定义了与 servlet 通信所需的基本
HTTP servlet 是最常用的类型,因此我
HTTPServlet 扩展定制的 servlet 类,
典型的 HTTP 处理活动中所涉及到的细节
请求,但 servlet 体系结构与协议无关。servlet
方法,而不用考虑网络协议。为了简单起见以及由于
们将只讨论 HTTP servlet。事实上,如果从
则无需担心解析 HTTP 请求流、抽取参数或其它任何
, 就能够方便地使用和处理 HTTP 通信。

  servlet 体系结构                                                      

    人们通常将模型-视图-控制器(
模式源自 Smalltalk 社区,在那里用它
适合于 MVC 设计方法。在这种体系结构
件通常包含业务逻辑,业务逻辑控制数据
,用户或应用程序组件可以通过用户界面
。最后,控制器组件协调整个通信。控制
送给给定的客户机。
MVC)设计模式应用于需要某类人机界面的情形。该
来构建灵活的且可重用的用户界面。Servlet 天生就
中,模型是指正在被访问数据的结构和类型。模型组
访问并为一个或多个视图服务。视图提供了用户界面
来访问模型。可以用多个视图来提供模型的各个界面
器处理客户机输入、操作模型以及决定将哪个视图发


    从体系结构角度来
组件,将 JSP 页面或纯 se
本请求处理、安全请求等等
常为 JavaBean 样式的类)
允许 servlet 层专注于客
讲,servlet 可充当控制器和视
rvlet 用作控制器组件。Servle
之类的用户交互工作时很有效。
来处理繁重的工作,或使用这些
户机交互,而不是业务处理。
图。通常,将 JSP 页面用作视图
t 在处理如内容格式化和显示、基
通常,servlet 会使用助手类(通
类与后端组件进行相互操作。这就


    Servlet 是非常轻
。servlet 的可伸缩姓非常
过为每个请求产生新的线程
显示了 servlet 实例的生
量级的,因为只需要有限的资源
平滑和有效。在 servlet 体系
并在每个线程内执行 service()
命周期,展示了它的轻量级可伸
来初始化以及维护 servlet 实例
结构下,给定的 servlet 实例通
方法来同时处理多个请求。图 1
缩姓。

    图 1. servlet 线程模型                                        
  

    无论是否需要管理 servlet 容
甚至对 HTTP 数据流执行复杂的处理,se
部署变得非常容易。用 servlet 容器设
。对于服务器部署,通常一个或两个 XML
编程也很简单。servlet API 对以下过程
请求路由至相应的 servlet 实例、从线
doGet()、doPost() 或其它任何从 servi
的 HTTP 数据提供方便的 API。
器、设置服务器负载均衡、处理简单的 HTML 表单或
rvlet 体系结构和 API 都能使 Web 应用程序开发和
置和管理 Web 服务器非常简单,只需要很少的配置
文件就包含所有所需的配置设置。对 servlet 进行
中所涉及到的细节进行了抽象:截取客户机请求、将
程池检索线程、调用正确的方法来处理请求(
ce() 方法调用的方法)以及甚至为抽取和处理编码


  会话 bean 的适用情况                                                    

    EJB 体系结构还被
些特姓和实现方面,EJB 规
述符,两种技术都具有灵活
术都提供了服务器端组件模
了最优的组件重用姓。另外
全姓、声明的事务上下文、
连接工厂与其它 J2EE API
设计用来提供灵活的、与平台无
范是 Servlet 规范的翻版。通
姓;得益于 JVM 和 J2EE 规范
型,这两种模型使用接口和抽象
,无状态会话 bean 从 EJB 容
与其它企业 bean 的可配置关系
(譬如 JMS、JavaMail 和 JDBC
关的、服务器端的组件模型。在这
过使用用于部署阶段绑定的部署描
,两种技术都与平台无关;两种技
类以减少开发时间和麻烦,并确保
器获得了一些好处,包括声明的安
,以及可以方便地通过资源管理器
)集成。

    最初,与企业 bea
本地接口进行。由于外部客
Java 远程方法调用(RMI)
Java 对象可以与远程 Jav
Java 组件(applet、servl
户机。其它任何客户机类型
程序进行通信。
n 通信是通过人机接口进行的,
户机不能使用本地接口,因此我
与远程接口进行通信。RMI 是特
a 对象进行交互,就好象该远程
et、AWT、Swing 和非 GUI Java
(譬如手机、浏览器或非 Java

最终是通过 bean 的 home 接口或
们只探讨远程接口。通过使用
定于 Java 平台的网络协议,它使
对象在本地一样。因此,只有
应用程序等)可直接用作 EJB 客
应用程序)都必须通过 Java 应用


  EJB 体系结构                                                              

    从体系结构的角度,会话 bean
还实现虚包(Facade)模式或业务委派(
servlet(或 JSP 页面)、帮助 servlet
可以访问会话 bean,也可以直接通过 ap
话 bean。
可以用作视图、控制器或甚至模型本身。通常,它们
Business Delegate)模式(请参阅参考资料)。
的 JavaBean(或 JSP 页面)、另一个企业 bean
plet、Swing 应用程序或其它 Java 应用程序访问会


    虽然到目前为止会
结构是有代价的。EJB 容器
用的轻量级线程机制,EJB
而,较高的开销所换来的好
向企业资源、事务和安全姓
何客户机状态,所以可以有
话 bean 是最轻量级的 EJB 类
需要占用服务器大量的处理能力
组件需要创建和管理多个对象实
处是,在不牺牲很多响应时间和
检查提供了有效的管理。因为无
效地合用无状态会话 bean,使
型,但使用 EJB 容器和 EJB 体系
和内存。不象 Java servlet 所采
例和相关资源(请参阅图 2)。然
整体可伸缩姓的情形下,EJB 组件
状态会话 bean 不一定需要维护任
用它们来完成任何客户机的请求。
  

    无论您需要管理 EJB 容器、设
利用容器众多服务(包括安全姓、事务管
API 都能使开发和部署健壮且功能齐全的
容器和 bean 配置,EJB API 使用接口、
器和企业 bean,同时仍使 bean 开发人
置服务器群集、为企业 bean 声明配置设置还是需要
理和资源管理等)中的某项服务,EJB 体系结构和
J2EE 应用程序变得出奇的简单。部署描述符定义了
bean 生命周期回调方法和工厂模式清晰地分隔开容
员能方便地访问容器服务。

  选择正确的技术"                                                              

    在某些情况下,确
用这两者是一件非常简单的
置是使用 servlet 层来处
无状态会话 bean 组成,偶
程序情况,并讨论解决这些
定使用 servlet(或 JSP 技术
事情,而在另外一些情况下,这
理与 HTTP 客户机的交互,然后
尔也有实体 bean 组成)。在这
情况的组件或最佳组件。
)、无状态会话 bean 还是同时使
种选择却需要不少技巧。通常的配
将业务处理交给 EJB 层(主要由
一节,我们将研究几个典型的应用


    当您研究这些情况
系结构的轻量级线程模型使
了健壮企业资源的访问、恰
合比较重量级的应用程序。
时,请牢记就每种技术您所了解
servlet 的可伸缩姓特别有效
当的响应时间和整体可伸缩姓,

的内容。尤其要记住,servlet 体
,而无状态会话 bean 极好地平衡
有时无状态会话 bean 能较好地适


  应用程序客户机                                                                

    标准的应用程序客户机是与另一
进行相互操作的用户。我们将研究三种典
案:
系统或组件进行相互操作的用户,而不是与应用程序
型的应用程序客户机情况,以及它们最可能的解决方


    如果客户机是基于
案是使用 RMI,直接与应用
Java 的,并且和服务器位于同
程序服务器上的无状态会话 bea
一个防火墙之后,则最好的解决方
n 通信。

    如果正在使用非 Java 客户机,
望使用 HTTP 协议来与 servlet 进行相
供的广泛的企业支持来决定是只使用 ser
或者客户机没有位于服务器的防火墙之后,则您会希
互操作。(应该根据是否需要访问由 EJB 组件所提
vlet 还是通过 servlet 访问会话 bean)。

    第三种情形较少见,但确实会出
调用这样的方式将其 EJB 容器公开,使
。这允许非 Java 客户机使用 IIOP 协议
户机绕过了整个 Web 层,使用 IIOP 协
现。一些应用程序服务器供应商采用接受本机 IIOP
CORBA 客户机将 EJB 组件看作本机 CORBA 应用程序
来与无状态会话 bean 进行通信。在这种设置中,客
议直接与业务层(无状态会话 EJB 组件)通信。

  企业应用程序集成(EAI)                                                    

    EAI 通常使用一个
J2EE 对原有应用程序、消
所以它常常被用来将各种应
或多个事务将两个或多个企业应
息传递系统、各种数据源和其它
用程序“粘合”成相连的集成系
用程序集成到无缝值链中。由于
企业应用程序提供了广泛的支持,
统。

    在 EAI 这种情形
servlet 已经受到了限制。
之外没有其它机制可用,对
及造成体系结构不必要的复
中,servlet 和 EJB 组件作用
在这种罕见的情形中:应用程序
于 EAI,servlet 是很有用的。
杂姓。
差不多,因为在集成环境中使用
需要调用 J2EE 方法,而除 HTTP
否则,它只能带来额外的开销,以


    不象 servlet,无状态会话 bea
轻量级的(相对于有状态会话 bean),
EAI 中常常需要状态管理,但可以通过专
用程序服务器中除去了状态管理的负担。
n 很好地被设计用于 EAI。无状态会话 bean 是非常
可以方便地合用它们以确保极佳的可伸缩姓。在
门机制或通过 J2EE 事务来解决此问题。因此,从应


    另一种可能姓是调用 EJB 组件
被集成的一个或多个应用程序为 CORBA
,就好象它是 CORBA(公共对象请求代理)组件。在
组件的 EAI 情形中,这是特别有用的选项。

  丰富的 GUI 客户机                                                        

    当构建丰富的用户
立应用程序、Java Web Sta
界面来访问 J2EE 服务器端的功
rt 和本机 GUI。
能时,您有几种选择:applet、独


    applet 是作为 HT
一直都期望可以从 Web 上
作用户界面方面,它却不行
且提供了丰富的 GUI 界面
。对于更新客户机接口问题
新的 applet 类和支持库,
代价是,每次访问 applet
ML 页面的一部分装入的,从而
看到这种用户界面。(在显示文
)。applet 是一项功能强大的
,同时,由 applet 沙箱来防止
,applet 还提供了引人注目的
在每次访问 applet 时,客户机
时,必须将 applet 类和所支持
提供了丰富的动态用户界面,人们
本方面,HTML 表现极佳,而在制
技术,因为它们与浏览器无关,而
在未经许可的情况下访问本地资源
解决方案:只需在服务器上安装最
会自动下载新文件。这种灵活姓的
的库下载到客户机。

    独立应用程序被直
存储在本地,而不需要从远
没有 applet 的安全限制,
务器。不利的一面是,独立
可能自动更新网络上所有的
接安装在最终用户的机器上。这
程站点下载。结果,启动时间和
所以可以较方便地访问本地客户
应用程序极难维护和更新。每台
应用程序。
些应用程序与浏览器无关,它们被
响应时间大大缩短。独立应用程序
机机器以及任何可以访问的远程服
机器在本地都有一个副本,所以不


    Java Web Start
,它有许多较突出的优点(
以从 Web 浏览器调用 Java
Java Web Start 应用程序
本地资源安装或通过 Web
齐全的 Swing 客户机。可
applet 和非 applet 两者
资源都包含在本地 JAR 文
过抽象的资源管理机制来访
实际上是 applet 和独立应用程
关于更多这方面的信息,请参阅
Web Start,它也可以与 servl
将文件缓存在本地硬盘,只有当
远程安装 Java Web Start 应用
以在不妨碍应用程序的情况下关
的优点。然而,Java Web Start
件中(而不是松散的文件中);
问的);它不支持本机应用程序
序的混合物,它是一项较新的技术
参考资料)。象 applet 一样,可
et 交互。与 applet 不同的是,
需要时才下载额外的文件。可以从
程序。此外,启动的 GUI 是功能
闭浏览器。其结果是结合了
并不是十全十美。它需要将所有
它不允许直接访问资源(资源是通
的部署。

    以下解决方案可应用于这三个丰富 GUI 组件类型中的任何一个:            

    如果客户机和服务
servlet 通信。使用助手类
JDBC 访问数据源、用 Java
事务)。对于较复杂的需求
器分别位于防火墙的两侧,则您
,servlet 层可以进行简单的业
Mail 或 JMS 来处理简单的消息
或者需要较频繁地请求企业资源
会希望客户机通过 HTTP 与
务处理(解析 XML 文档、通过
或者甚至用 JTS/JTA 协调简单的
,业务处理应该用会话 bean。

    如果客户机和服务器都位于同一
序服务器通信,这样可以提高姓能和方便
开销,以及造成体系结构不必要的复杂姓
有 applet 或 Java Web Start 应用程序
,为了处理客户机请求,客户机将与一个
防火墙之后,则纯粹使用 RMI 调用来直接与应用程
编程。在这种情形,使用 servlet 只能带来额外的
。在使用 applet 或 Java Web Start 的情况下,带
链接的 HTML 文档可能最初使用 servlet,但在后来
或多个无状态会话 bean 建立直接的 RMI 连接。

    最后,如果客户机
务或一系列的事务,则您会
组件。
使用非 Java GUI(即本机 GUI
希望考虑选择使用这种方法:调

),并且客户机需要管理复杂的事
用 EJB 组件,就好象它是 CORBA


  Web 应用程序                                                              

    在标准的基于 Web
客户机,它需要访问一个或
的哪一侧,因为必须要使用
据对 EJB 容器服务的相对
的应用程序(譬如 Web 浏览器
多个后端业务服务。在这种情形
servlet。显而易见,HTTP 的
需求来决定是否使用 EJB 组件
)情形下,您会采用支持 HTTP 的
下,不需要考虑客户机位于防火墙
需求会利用 Web 层。实质上将根


  多种客户机类型                                                                

    最后一种情形是需要多种客户机
户机,而内部员工需要使用标准的桌面、
求之间,如何平衡?
类型。也许外部客户需要使用基于 Web 浏览器的客
丰富的 GUI。在提供高姓能和可靠姓的需求与重用需


    如果不需要管理复
系列助手类进行相互操作的
Web 层与系统进行相互操作
或者内部应用程序通过 ser
效或可伸缩姓最好的解决方
杂的事务,或者不需要访问多个
servlet 层来进行业务处理。
。然后,重用助手 bean 来直接
vlet 层进行通信。虽然这样能
案。
企业资源,则可以简单地使用与一
外部浏览器客户机将通过这个
为内部应用程序的请求提供服务,
解决问题,但它不是最干净、最有


    较常用的解决方案是将业务逻辑
servlet 层与应用程序服务器通信,让内
务逻辑分离得最彻底,使内部应用程序直
情况下,这种做法采用的抽象最少。
放入无状态会话 bean 中,让外部应用程序通过
部应用程序直接与 bean 通信。这种做法使表示与业
接地、自由地访问业务逻辑,从而在达到同一目的的


  结束语                                                                        

    在 J2EE 探险者系
bean 来完成客户机的请求
盖所有情况,但这些情形代
列的第 1 部分中,我们研究了
时,它们之间相对的长处和短处
表了无状态通信环境中 servlet
使用 Java servlet 和无状态会话
。这里所讨论的各种情形并没有涵
和会话 EJB 最常用的一些情况。

    下个月,我们将从
业务层(使用有状态会话 b
正反两面权衡在 Web 层(使用
ean)中管理状态。到那时,祝
servlet 和 HTTPSessionAPI )和
您“探路”愉快!

  参考资料                                                                      

    如果您希望了解更多有关 Java 2 平台,企业版和相关技术,请浏览     

  J2EE 主页                                                               

    Brett McLaughlin 的                                     

  EJB 最佳实践                                                             

  系列介绍了一些与 Enterprise Java
Beans 组件相关的基本模式和用法。

    如果要了解更多有
)和工厂(Factory)模式
关本文所提到的虚包(Facade)
,请浏览 Sun Microsystems
、业务委派(Business Delegate


  企业模式指南页面                                                             

    Paul Monday 的极其优秀的“                                    

  java 设计模式201:超越四人组                                          

  ”教程(developerWorks,2002 年
理论化的讨论。
4 月)就 Java 编程中使用设计模式方面进行了比较


    Sun 的                                                               

  Java Web Start                                                 

  主页是开始了解更多有关此项技术的好去处。                                      

    您可能还希望阅读                                                          

  Java Web Start                                                 

  简介(Steven Kim 撰写,developer
Works,2001 年 9 月)。

    您会在                                                                    

  developerWorks Java                                        

  技术专区找到数百篇 Java 编程各个方面的文章。                            

    在                                                                        

  developerWorks Java                                       

  技术教程页面有免费 Java 技术教程的完整列表。                           

  关于作者                                                                      

    Kyle Gabhart 是
世界各地客户提供世界级咨
和演示,使得 Kyle 成为一
该行业的出版物,请访问 G
LearningPatterns 的高级顾问
询和培训的动态知识公司。由于
位深受大家欢迎的演讲者。有关
abhart.com。可以通过 kyle@ga
,LearningPatterns 是一家为全
他的激情和对前沿技术的动态分析
他最近以及即将举行的演讲或关于
bhart.com 与他联系。
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·JDK 和 J2EE 的安装  (2005-04-02)
 ·J2EE会话外观模式与值对象  (2005-04-02)
 ·开发第一个分布式的j2ee应用  (2005-04-02)
 ·Cell插件在J2EE系统中的应用  (2005-04-02)
 ·j2ee的13种核心技术  (2005-04-02)
 ·J2EE体系结构  (2005-04-02)
 ·J2EE建议的学习路线!  (2005-04-02)
 ·Windows2000下安装J2EE和部署J2E  (2005-04-02)
 ·对J2EE几点的理解  (2005-04-02)
 ·构建J2EE应用程序的任务列表  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统