J2EE的13種核心技術簡介

火星人 @ 2014-03-09 , reply:0


  J2EE平台由一整套服務(Services)、應用程序介面(APIs)和協議構成,它對開發基於Web的多層應用提供了功能支持.在本文中將解 釋支撐J2EE的13種核心技術:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL,JTS, JTA,JavaMail和JAF,同時還將描述在何時、何處需要使用這些技術.當然,我還要介紹這些不同的技術之間是如何交互的.此外,為了讓您更好地 感受J2EE的真實應用,將在WebLogic應用伺服器,來自BEA Systems公司的一種廣為應用的產品環境下來介紹這些技術.不論對於Web Logic應用伺服器和J2EE的新手,還是那些想了解J2EE能帶來什麼好處的項目管理者和系統分析員,相信本文一定很有參考價值. http://www.mscto.com

  一、宏觀印象:分散式結構和J2EE

  過去,二層化應用--通常被稱為client/server應用--是大家談論的最多的.在很多情況下,伺服器提供的惟一服務就是資料庫服務.在這 種解決方案中,客戶端程序負責數據訪問、實現業務邏輯、用合適的樣式顯示結果、彈出預設的用戶界面、接受用戶輸入等.client/server結構通常 在第一次部署的時候比較容易,但難於升級或改進,而且經常基於某種專有的協議,通常是某種資料庫協議.它重用業務邏輯和界面邏輯非常困難.更重要的 是,在Web時代,二層化應用通常不能體現出很好的伸縮性,因而很難適應Internet的要求.

  Sun設計J2EE的部分起因就是想解決二層化結構的缺陷.於是,J2EE定義了一套標準來簡化N層企業級應用的開發.它定義了一套標準化的組件,並為這些組件提供了完整的服務.J2EE還自動為應用程序處理了很多實現細節,如安全、多線程等.

  用J2EE開發N層應用包括將二層化結構中的不同層面切分成許多層.一個N層化應用A能夠為以下的每種服務提供一個分開的層:

  顯示:在一個典型的Web應用中,客戶端機器上運行的瀏覽器負責實現用戶界面.

  動態生成顯示:儘管瀏覽器可以完成某些動態內容顯示,但為了兼容不同的瀏覽器,這些動態生成工作應該放在Web伺服器端進行,使用JSP、Servlets,或者XML(可擴展標記語言)和(可擴展樣式表語言).

  業務邏輯:業務邏輯適合用SessionEJBs(後面將介紹)來實現.

  數據訪問:數據訪問適合用EntityEJBs(後面將介紹)和JDBC來實現. http://www.mscto.com

  後台系統集成:同後台系統的集成可能需要用到許多不同的技術,至於何種最佳需要根據後台系統的特徵而定. 軟體開發網

  您可能開始詫異:為什麼有這麼多的層?事實上,多層方式可以使企業級應用具有很強的伸縮性,它允許每層專註於特定的角色.例如,讓Web伺服器負責提供頁面,應用伺服器處理應用邏輯,而資料庫伺服器提供資料庫服務.

  J2EE建立在Java2平台標準版(J2SE)的基礎上,具備了J2SE的所有優點和功能.包括「編寫一次,到處可用」的可移植性、通過 JDBC訪問資料庫、同原有企業資源進行交互的CORBA技術,以及一個經過驗證的安全模型.在這些基礎上,J2EE又增加了對EJB(企業級Java組 件)、Javaservlets、Java伺服器頁面(JSPs)和XML技術的支持.

  二、分散式結構與WebLogic應用伺服器

  J2EE提供了一個框架--一套標準API--用於開發分散式結構的應用,這個框架的實際實現留給了第三方廠商.部分廠商只是專註於整個J2EE架 構中的的特定組件,例如Apache的Tomcat提供了對JSP和servlets的支持,BEA系統公司則通過其WebLogic應用伺服器產品為整 個J2EE規範提供了一個較為完整的實現.

  WebLogic伺服器已使建立和部署伸縮性較好的分散式應用的過程大為簡化.WebLogic和J2EE代你處理了大量常規的編程任務,包括提供事務服務、安全領域、可靠的消息、名字和目錄服務、資料庫訪問和連接池、線程池、負載平衡和容錯處理等.

  通過以一種標準、易用的方式提供這些公共服務,象WebLogic伺服器這樣的產品造就了具有更好伸縮性和可維護性的應用系統,使其為大量的用戶提供了增長的可用性.

  J2EE技術

  在接下來的部分里,我們將描述構成J2EE的各種技術,並且了解WebLogic伺服器是如何在一個分散式應用中對它們進行支持的.最常用的J2EE技術應該是JDBC、JNDI、EJB、JSP和servlets,對這些我們將作更仔細的考察.

  三、Java Database Connectivity(JDBC)

  JDBCAPI以一種統一的方式來對各種各樣的資料庫進行存取.和ODBC一樣,JDBC為開發人員隱藏了不同資料庫的不同特性.另外,JDBC建立在Java的基礎上,因此還提供了資料庫存取的平台獨立性.

  JDBC定義了4種不同的驅動程序,現分述如下:

  類型1:JDBC-ODBCBridge

  在JDBC出現的初期,JDBC-ODBC橋顯然是非常有實用意義的,通過JDBC-ODBC橋,開發人員可以使用JDBC來存取ODBC數據源. 不足的是,他需要在客戶端安裝ODBC驅動程序,換句話說,安裝MicrosoftWindows的某個版本.使用這一類型你需要犧牲JDBC的平台 獨立性.另外,ODBC驅動程序還需要具有客戶端的控制許可權.

  類型2:JDBC-nativedriverbridge

  JDBC本地驅動程序橋提供了一種JDBC介面,它建立在本地資料庫驅動程序的頂層,而不需要使用ODBC.JDBC驅動程序將對資料庫的API從標準的JDBC調用轉換為本地調用.使用此類型需要犧牲JDBC的平台獨立性,還要求在客戶端安裝一些本地代碼.

  類型3:JDBC-networkbridge

  JDBC網路橋驅動程序不再需要客戶端資料庫驅動程序.它使用網路上的中間伺服器來存取資料庫.這種應用以下技術的實現有了可能,這些技術包括 負載均衡、連接緩衝池和數據緩存等.第3種類型往往只需要相對更少的下載時間,具有平台獨立性,而且不需要在客戶端安裝並取得控制權,很適合於 Internet上的應用.

  類型4:PureJavadriver

  第4種類型通過使用一個純Java資料庫驅動程序來執行資料庫的直接訪問.此類型實際上在客戶端實現了2層結構.要在N-層結構中應用,一個更好的做法是編寫一個EJB,讓它包含存取代碼並提供一個對客戶端具有資料庫獨立性的服務.

  WebLogic伺服器為一些通常的資料庫提供了JDBC驅動程序,包括Oracle,Sybase,MicrosoftSQLServer以及 Informix.它也帶有一種JDBC驅動程序用於Cloudscape,這是一種純Java的DBMS,WebLogic伺服器中帶有該資料庫的評估 版本.

  以下讓我們看一個JDBC實例:在這個例子中我們假定你已經在Cloudscape中建立了一個PhoneBook資料庫,並且包含一個表,名為 CONTACT_TABLE,它帶有2個欄位:NAME和PHONE.開始的時候先裝載CloudscapeJDBCdriver,並請求 drivermanager得到一個對PhoneBookCloudscape資料庫的連接.通過這一連接,我們可以構造一個Statement對象並用 它來執行一個簡單的SQL查詢.,用循環來遍歷結果集的所有數據,並用標準輸出將NAME和PHONE欄位的內容進行輸出.

  import java.sql.*; public class JDBCExample{ public static void main( String args[] ) {try{ Class.forName("COM.cloudscape.core.JDBCDriver"); Connection conn = DriverManager.getConnection("jdbc:cloudscape:PhoneBook"); Statement stmt = conn.createStatement(); String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BYname"; ResultSet resultSet = stmt.executeQuery( sql );  String name; String phone; while ( resultSet.next() ) {name = resultSet.getString(1).trim();phone = resultSet.getString(2).trim();System.out.println( name ", " phone );  }catch ( Exception e ) {// Handle exception heree.printStackTrace(); }} } http://www.mscto.com

  OK.接著來看一看JDBC是如何在企業應用中的進行使用.

  JDBC在企業級應用中的應用.以上實例其實是很基本的,可能有些微不足道.它假定了一個2層結構.在一個多層的企業級應用中,更大的可能是在客戶 端和一個EJB進行通信,該EJB將建立資料庫連接.為了實現和改進可伸縮性和系統性能, WebLogic伺服器提供了對連接緩衝池connection pool的支持.

  Connection pool減少了建立和釋放資料庫連接的消耗.在系統啟動以後即可建立這樣的緩衝池,此後如故再有對資料庫的請求,WebLogic伺服器可以很簡單地從緩 沖池中取出數據.數據緩衝池可以在WebLogic伺服器的 weblogic.properties 文件中進行定義.

  在企業級應用的另一個常見的資料庫特性是事務處理.事務是一組申明statement,它們做為同一個statement來處理以保證數據完整 性.預設情況下JDBC使用 auto-commit 事務模式.這可以通過使用Connection類的setAutoCommit() 方法來實現.現在已經對JDBC有了一些認識,下面該轉向JNDI了.

  四、Java Naming and Directory Interface (JNDI)

  JNDI API被用於執行名字和目錄服務.它提供了一致的模型來存取和操作企業級的資源如DNS和LDAP,本地文件系統,後者在應用伺服器中的對象.在JNDI 中,在目錄結構中的每一個結點稱為context.每一個JNDI名字都是相對於context的.這裡沒有絕對名字的概念存在.對一個應用來說,它可以 通過使用 InitialContext 類來得到其第一個context:

  Context ctx = new InitialContext();

  應用可以通過這個初始化的context經有這個目錄樹 來定位它所需要的資源或對象.例如,假設你在Weblogic伺服器中展開了一個EJB並將home介面綁定到名字 myApp.myEJB ,那麼該EJB的某個客戶在取得一個初始化context以後,可以通過以下語句定位home介面:

  MyEJBHome home = ctx.lookup( "myApp.myEJB" );

  在這個例子中,一旦你有了對被請求對象的參考,EJB的home介面就可以在它上面調用方法.我們將在下面的"Enterprise Java Beans"章節中做更多的介紹.

  以上關於JNDI的討論只是冰山之一角而已.如果要更進一步地在context中查找對象,JNDI也提供了一些方法來進行以下操作:將一個對象插 入或綁定到context.這在你展開一個EJB的時候是很有效的.從context中移去對象.列出context中的所有對象.創建或刪除子一級的 context.接下來,要開始關注EJB了.

  五、Enterprise Java Beans (EJB)

  J2EE技術之贏得某體廣泛重視的原因之一就是EJB.它們提供了一個框架來開發和實施分散式商務邏輯,由此很顯著地簡化了具有可伸縮性和高度 複雜的企業級應用的開發.EJB規範定義了EJB組件在何時如何與它們的容器進行交互作用.容器負責提供公用的服務,例如目錄服務、事務管理、安全性、資 源緩衝池以及容錯性.

  EJB規範定義了三種基本的bean類型:

  Stateless session beans: 提供某種單一的服務,不維持任何狀態,在伺服器故障發生時無法繼續存在,生命期相對較短.例如,一個stateless sessionbean可能被用於執行溫度轉換計算.

  Stateful session bean: T提供了與客戶端的會話交互,可以存儲狀態從而代表一個客戶.典型例子是購物車.Stateful session bean在伺服器故障時無法繼續生存,生命氣相對較短.每一個實例只用於一個單個的線程.

  Entity beans: 提供了一致性數據的表示-- 通常存放在資料庫中 -- 在伺服器故障發生后能繼續存在.多用戶情況下可以使用EJB來表示相同的數據.entity EJB的一個典型例子是客戶的帳號信息.

  儘管有以上的區別,所有的EJB還是有許多的共同之處.它們都處理homeinterface.它定義了一個客戶端是如何創建與消亡EJB的.可以 在bean中對定義了客戶端方法的遠程介面進行調用;bean類則執行了主要的商務邏輯.描述EJB的開發已經超出了本文的範圍.但是,如果一個EJB已 經被開發了或者從第三方進行了購買,它就在應用伺服器中進行發布.WebLogic Server 5.1帶有一個EJB Deployer Tool來協助處理EJB的發布.當你使用EJB Deployer Tool的時候,你要定義客戶端所用的JNDI名字來定位EJB.Deployer Tool將生成wrapper類來處理和容器的通信以及在一個jar文件中把被請求的Java類綁定在一起.

  一旦EJB被發布,客戶端就可以使用它的JNDI名字來定位EJB.,它得到一個到home介面的reference.然後,客戶端可以使 用該介面,調用一個create() 方法來得到伺服器上運行的某個bean實例的句柄;,客戶端可以使用該句柄在bean中調用方法.了解 EJB后,讓我們再來看JSP.

  六、JavaServer Pages (JSPs)

  可能已經有許多人已經熟悉Microsoft的Active Server Pages(ASP)技術了.JSP和ASP相對應的,但更具有平台對立性.他們被設計用以幫助Web內容開發人員創建動態網頁,並且只需要相對較少的代 碼. 即使Web設計師不懂得如何編程也可以使用JSP,JSP應用是很方便的. JSP頁面由HTML代碼和嵌入其中的Java代碼所組成.伺服器在頁面被客戶端所請求以後對這些Java代碼進行處理,然後將生成的HTML頁面返回給 客戶端的瀏覽器.

  下面來看一個JSP的簡單實例.它只顯示了伺服器的當前日期和時間.雖然,對語法的具體解釋已經超出了本文的範圍,但我們還是可以很直觀地看到,Java代碼被放在 符號的中間,而Java的表達式則放在符號之間.

  <H1>Date JSP sample</H1><H2> <% response.setHeader("Refresh", 5); %> The current date is <%= new Date() %>.</H2> http://www.mscto.com

  下面是: Java servlets

  七、Java Servlets

  Servlet 提供的功能大多與JSP類似,不過實現的方式不同.JSP通常是大多數HTML代碼中嵌入少量的Java代碼,而servlets全部由Java寫成並且 生成HTML.Servlet是一種小型的Java程序,它擴展了Web伺服器的功能.作為一種伺服器端的應用,當被請求時開始執行,這和CGI Perl腳本很相似.Servlets和CGI腳本的一個很大的區別是:每一個CGI在開始的時候都要求開始一個新的進程 -- 而servlets是在servlet引擎中以分離的線程來運行的.因此servlets在可伸縮性上提供了很好的改進.

  在開發servlets的時候,您常常需要擴展javax.servlet.http.HttpServlet類,並且override一些它的方法,其中包括:

  service(): 作為dispatcher來實現命令-定義方法

  doGet(): 處理客戶端的HTTP GET請求.

  doPost(): 進行HTTP POST操作

  其它的方法還包括處理不同類型的HTTP請求 -- 可以參考HttpServlet API文檔.以上描述的是標準J2EE Servlet API的各種方法.WebLogic伺服器提供了一個該API完整的實現途徑.一旦你開發了一個servlet,你就可以在 weblogic.properties 中加以註冊並由此可以在WebLogic伺服器中對它進行配置.

  通過Java servlets,我們已經到達了J2EE主要技術的末尾了.但J2EE所提供的並不止於這些.下面的段落中我們將簡要地看一下現存的一些技術,包括RMI,Java IDL和CORBA, JTA, 以及XML,等等.

  八、Remote Method Invocation (RMI)

  正如其名字所表示的那樣,RMI協議是在遠程對象上調用一些方法.它使用了連續序列方式在客戶端和伺服器端傳遞數據.RMI是一種被EJB使用的更下層的協議.

  九、Java IDL/CORBA

  在Java IDL的支持下,開發人員可以將Java和CORBA集成在一起. 他們可以創建Java對象並使之可在CORBA ORB中展開, 或者他們還可以創建Java類並作為和其它ORB一起展開的CORBA對象的客戶.后一種方法提供了另外一種途徑,通過它Java可以被用於將你的新的應 用和legacy系統相集成.

  十、Java Transaction Architecture (JTA)/Java Transaction Service (JTS)

  JTA定義了一種標準的API,應用系統由此可以存取各種事務監控.JTS是CORBA OTS事務監控的基本的實現.JTS規定了事務管理器的實現方式.該事務管理器是在高層支持Java Transaction API (JTA)規範,並且在較底層實現OMG OTS specification的Java映像.JTS事務管理器為應用伺服器、資源管理器、獨立的應用以及通信資源管理器提供了事務服務.

  十一、JavaMail and JavaBeans Activation Framework

  JavaMail是用於存取郵件伺服器的API,它提供了一套郵件伺服器的抽象類.僅支持SMTP伺服器,也支持IMAP伺服器.JavaMail 利用JavaBeans Activation Framework (JAF)來處理MIME-編碼的郵件附件.MIME的位元組流可以被轉換成Java對象,或者轉換自Java對象.由此大多數應用都可以不需要直接使用 JAF. 軟體開發網

  十二、Java Messaging Service (JMS)

  JMS是用於和面向消息的中間件相互通信的應用程序介面(API).它既支持點對點的域,有支持發布/訂閱(publish/subscribe) 類型的域,並且提供對下列類型的支持:經認可的消息傳遞,事務型消息的傳遞,一致性消息和具有持久性的訂閱者支持.JMS還提供了另一種方式來對您的應用 與legacy backend系統相集成.

  十三、Extensible Markup Language (XML)

  XML是一種可以用來定義其它標記語言的語言.它被用來在不同的商務過程中共享數據.XML的發展和Java是相互獨立的,但是,它和Java具有 的相同目標正是平台獨立性.通過將Java和XML的組合,您可以得到一個完美的具有平台獨立性的解決方案.目前正有許多不同的公司在為Java和XML 的組合而努力.如果要了解更多的這方面的信息,可以訪問Sun的Java-XML頁面,或者IBM developerWorks的XML Zone.




[火星人 via ] J2EE的13種核心技術簡介已經有144次圍觀

http://www.coctec.com/docs/java/show-post-60486.html