J2EE容器分為WEB容器和EJB容器,Tomcat/Resin是Web容器;JBoss是EJB容器+Web容器等,其中Web容器直接使用Tomcat實(shí)現(xiàn)的。所以你開發(fā)的Web應(yīng)用程序可以在上面兩種容器運(yùn)行,而你開發(fā)的Web+EJB應(yīng)用則只可以在JBoss服務(wù)器上運(yùn)行,商業(yè)產(chǎn)品Websphere/Weblogic等和JBoss屬于同一種性質(zhì)。
J2EE容器也稱為J2EE服務(wù)器,大部分時(shí)它們概念是一致的。
http://www.douzhe.com/jerry/archive/archive1_cn.htm
容器:充當(dāng)中間件的角色
WEB容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個(gè)環(huán)境,使JSP,SERVLET直接更容器中的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問題。主要有WEB服務(wù)器來實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。
EJB容器:Enterprise Java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿足J2EE規(guī)范的EJB放入該容器,馬上就會(huì)被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接口來獲得系統(tǒng)級(jí)別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。
WEB容器和EJB容器在原理上是大體相同的,更多的區(qū)別是被隔離的外界環(huán)境。WEB容器更多的是跟基于HTTP的請(qǐng)求打交道。而EJB容器不是。它是更多的跟數(shù)據(jù)庫、其它服務(wù)打交道。但他們都是把與外界的交互實(shí)現(xiàn)從而減輕應(yīng)用程序的負(fù)擔(dān)。例如SERVLET不用關(guān)心HTTP的細(xì)節(jié),直接引用環(huán)境變量session,request,response就行、EJB不用關(guān)心數(shù)據(jù)庫連接速度、各種事務(wù)控制,直接由容器來完成。
RMI/IIOP:遠(yuǎn)程方法調(diào)用/internet對(duì)象請(qǐng)求中介協(xié)議,他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是Java特有的。
JNDI:Java命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。
JMS:Java消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播。
JavaMAIL:Java郵件服務(wù)。提供郵件的存儲(chǔ)、傳輸功能。他是Java編程中實(shí)現(xiàn)郵件功能的核心。相當(dāng)MS中的EXCHANGE開發(fā)包。
JTA:Java事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。
JAF:Java安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略。
EAI:企業(yè)應(yīng)用集成。是一種概念,從而牽涉到好多技術(shù)。J2EE技術(shù)是一種很好的集成實(shí)現(xiàn)。
EJB容器
EJB容器用來容納業(yè)務(wù)邏輯,并為業(yè)務(wù)邏輯截取請(qǐng)求。EJB容器支持EJB訪問JMS、JAAS、JTA、JavaMail、JAXP、JDBC和連接器(Connector)。
Web容器
Web容器截取通過HTTP、FTP、SMTP或其他協(xié)議發(fā)送的請(qǐng)求。Web應(yīng)用容器為Servlet和JSP頁面提供的資源與EJB容器提供的資源相同。
應(yīng)用客戶端容器
客戶端應(yīng)用是獨(dú)立的Java應(yīng)用,它們在遠(yuǎn)程的獨(dú)立JVM上運(yùn)行(與Web容器和EJB容器所運(yùn)行的JVM不同)。應(yīng)用客戶端容器為這些應(yīng)用截取請(qǐng)求。
運(yùn)行在應(yīng)用客戶端容器上的程序非常類似于帶有main()方法的Java程序,不過,程序不再由JVM控制,而是由一個(gè)容器(也就是應(yīng)用客戶端容器)控制。
在應(yīng)用客戶端容器內(nèi)運(yùn)行的程序能夠訪問遠(yuǎn)程應(yīng)用服務(wù)器上的JAXP、JDBC、JMS和JAAS資源。
Applet容器
Applet容器是一個(gè)特殊的容器,它為在瀏覽器內(nèi)運(yùn)行的Java程序截取請(qǐng)求。Applet容器不提供任何對(duì)其他資源(比如JDBC或JMS)的訪問。在Applet容器內(nèi)運(yùn)行的Applet必須自己直接向應(yīng)用服務(wù)器請(qǐng)求資源(而不是把請(qǐng)求發(fā)送給容器,然后由容器發(fā)送請(qǐng)求給應(yīng)用服務(wù)器)。
對(duì)于Applet如何與EJB容器進(jìn)行通信,EJB規(guī)范沒有作出任何規(guī)定,但J2EE規(guī)范有這方面的規(guī)定。對(duì)于那些想要直接使用EJB的Applet,J2EE規(guī)范要求它們使用HTTP隧道。許多應(yīng)用服務(wù)器提供某種形式的HTTP隧道,支持Applet直接使用EJB。