Sun公司?998q发?.2版本的时候,使用了新名称Java2PlatformQ即Java2q_Q修改后的JDKUCؓ(f) Java2PlatformSoftwareDevelpingKitQƈ分ؓ(f)标准?StandardEditionQJ2SE),企业? (EnterpriseEditionQJ2EE)Q微型版(MicroEditionQJ2ME)。J2EE便由此诞生?/p>
Java2q_包括标准版(J2SEQ、企业版QJ2EEQ和微羃版(J2MEQ三个版本。他们的范围是:(x)J2SE包含于J2EE中,J2ME包含了J2SE的核心类Q但新添加了一些专有类?/p>
随着Java技术的发展QJ2EEq_得到了迅速的发展Q成为Java语言中最z跃的体pM一。现如今Q?span style="color: red;">J2EE不仅仅是指一U标准^収ͼҎ(gu)多的表达着一UY件架构和设计思想?/span>
2005q?月,JavaOne大会(x)召开QSUN公司公开JavaSE6。此ӞJava的各U版本已l更名以取消其中的数?QJ2EE更名为JavaEEQJ2SE更名为JavaSEQJ2ME更名为Java ME?/span>
web服务?/font>可以解析(handles)http?
议。当web服务器接收到一个httph(request)Q会(x)q回一个http响应
(response)Q例如送回一个html面。ؓ(f)了处理一个请?request)Qweb服务器可以响?response)一个静态页面或囄Q?
q行面跌{(redirect)Q或者把动态响?dynamic
response)的生委?delegate)l一些其它的E序例如cgi脚本Qjsp(javaserver
pages)脚本QservletsQasp(active server
pages)脚本Q服务器?server-side)javascriptQ或者一些其它的服务器端(server-side)技术。无论它?译?
?脚本)的目的如何,q些服务器端(server-side)的程序通常产生一个html的响?response)来让览器可以浏览?/p>
要知道,web服务器的代理模型(delegation
model)非常单。当一个请?request)被送到web服务器里来时Q它只单U的把请?request)传递给可以很好的处理请?
(request)的程?译者注:服务器端脚本)。web服务器仅仅提供一个可以执行服务器?server-side)E序和返?E序所产生??
?response)的环境,而不?x)超能范围。服务器?server-side)E序通常h事务处理(transaction
processing)Q数据库q接(database connectivity)和消?messaging){功能?/p>
虽然web服务器不支持事务处理或数据库q接池,但它可以配置(employ)各种{略(strategies)来实现容错?fault
tolerance)和可扩展?scalability)Q例如负载^?load
balancing)Q缓?caching)。集特?clustering—features)l常被误认ؓ(f)仅仅是应用程序服务器专有的特征?/p>
应用E序服务?the application server) Ҏ(gu)我们的定义,作ؓ(f)应用E序服务器,它通过各种协议Q可以包括httpQ把商业逻辑暴露l?expose)客户端应用程序。web服务器主要是?
理向览器发送html以供览Q而应用程序服务器提供讉K商业逻辑的途径以供客户端应用程序用。应用程序用此商业逻辑p你调用对象的一个方?
(或过E语a中的一个函?一栗?/p>
应用E序服务器的客户?包含有图形用L(fng)?gui)?可能?x)运行在一台pc、一个web服务器或者甚x其它的应用程序服务器上。在应用E序
服务器与其客L(fng)之间来回I梭(traveling)的信息不仅仅局限于单的昄标记。相反,q种信息是E序逻辑(program
logic)。正是由于这U逻辑取得?takes)数据和方法调?calls)的Ş式而不是静态htmlQ所以客L(fng)才可以随心所Ʋ的使用q种被暴?
的商业逻辑?/p>
在大多数情Ş下,应用E序服务器是通过lg(component)的应用程序接?api)把商业逻辑暴露(expose)(l客L(fng)应用E序)
的,例如Zj2ee(java 2 platform, enterprise edition)应用E序服务器的ejb(enterprise
javabean)lg模型。此外,应用E序服务器可以管理自q资源Q例如看大门的工?gate-keeping
duties)包括安全(security)Q事务处?transaction processing)Q资源池(resource
pooling)Q和消息(messaging)。就象web服务器一P应用E序服务器配|了多种可扩?scalability)和容?fault
tolerance)技术?/p>
一个例?/strong> 例如Q设想一个在U商?|站)提供实时定h(hun)(real-time
pricing)和有效?availability)信息。这个站?site)很可能会(x)提供一个表?form)让你来选择产品。当你提交查?
(query)后,|站?x)进行查?lookup)q把l果内嵌在html面中返回。网站可以有很多U方式来实现q种功能。我要介l一个不使用应用E序
服务器的情景和一个用应用程序服务器的情景。观察一下这两中情景的不同会(x)有助于你了解应用E序服务器的功能?/p>
情景1:不带应用E序服务器的web服务?/p>
在此U情景下Q一个web服务器独立提供在U商店的功能。web服务器获得你的请?request)Q然后发送给服务器端(server-
side)可以处理h(request)的程序。此E序从数据库或文本文?flat fileQ译者注:flat
file是指没有Ҏ(gu)格式的非二进制的文gQ如properties和xml文g{?中查扑֮价信息。一旦找刎ͼ服务器端(server-side)E序
把结果信息表C成(formulate)html形式Q最后web服务器把?x)它发送到你的web览器?/p>
而言之,web服务器只是简单的通过响应(response)html面来处理httph(request)?/p>
情景2:带应用程序服务器的web服务?/p>
情景2和情?相同的是web服务器还是把响应(response)的生委?delegates)l脚?译者注:服务器端(server
-side)E序)。然而,你可以把查找定h(hun)的商业逻辑(business
logic)攑ֈ应用E序服务器上。由于这U变化,此脚本只是简单的调用应用E序服务器的查找服务(lookup
service)Q而不是已l知道如何查找数据然后表CZؓ(f)(formulate)一个响?response)。这时当该脚本程序生html响应
(response)时就可以使用该服务的q回l果了?/p>
在此情景中,应用E序服务器提?serves)了用于查询品的定h(hun)信息的商业逻辑?服务器的)q种功能(functionality)没有?
出有xC和客户端如何用此信息的细节,相反客户端和应用E序服务器只是来回传送数据。当有客L(fng)调用应用E序服务器的查找服务(lookup
service)Ӟ此服务只是简单的查找q返回结果给客户端?/p>
通过从响应?response-generating)html的代码中分离出来Q在应用E序之中该定?查找)逻辑的可重用性更Z。其他的
客户端,例如收款机,也可以调用同L(fng)服务(service)来作Z个店员给客户l帐。相反,在情?中的定h(hun)查找服务是不可重用的因ؓ(f)信息内嵌?
html中了?/p>
总而言之,在情?的模型中Q在web服务器通过回应html面来处理httph(request)Q而应用程序服务器则是通过处理定h(hun)和有效?availability)h(request)来提供应用程序逻辑的?/p>
警告(caveats) 现在Qxml web services已经使应用程序服务器和web服务器的界线h了。通过传送一个xml有效载荷(payload)l服务器Qweb服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了?/p>
另外Q现在大多数应用E序服务器也包含了web服务器,q就意味着可以把web服务器当作是应用E序服务器的一个子?subset)。虽然应用程
序服务器包含了web服务器的功能Q但是开发者很把应用E序服务器部|?deploy)成这U功?capacity)(译者注:q种功能是指既有应用
E序服务器的功能又有web服务器的功能)。相反,如果需要,他们通常?x)把web服务器独立配|,和应用程序服务器一前一后。这U功能的分离有助于提高?
?单的webh(request)׃?x)?jing)响应用程序服务器?Q分开配置(专门的web服务器,集群(clustering){等)Q而且l最?
产品的选取留有余地?