<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-128  評論-55  文章-5  trackbacks-0
    Steven Gould在文中介紹了Java2平臺企業(yè)版(J2EE)的13種核心技術:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和 JAF。為了聯(lián)系實際,Gould基于WebLogic應用服務器來自BEA Systems公司的一種廣為應用的產(chǎn)品環(huán)境來介紹J2EE的這些技術。

    Java最初是在瀏覽器和客戶端機器中粉墨登場的。當時,很多人質疑它是否適合做服務器端的開發(fā)?,F(xiàn)在,隨著對Java2平臺企業(yè)版(J2EE)第三方支持的增多,Java被廣泛接納為開發(fā)企業(yè)級服務器端解決方案的首選平臺之一。

    J2EE平臺由一整套服務(Services)、應用程序接口(APIs)和協(xié)議構成,它對開發(fā)基于Web的多層應用提供了功能支持。

    在本文中我將解釋支撐J2EE的13種核心技術:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和 JAF,同時還將描述在何時、何處需要使用這些技術。當然,我還要介紹這些不同的技術之間是如何交互的。

    此外,為了讓您更好地感受J2EE的真實應用,我將在WebLogic應用服務器,來自BEA Systems公司的一種廣為應用的產(chǎn)品環(huán)境下來介紹這些技術。不論對于WebLogic應用服務器和J2EE的新手,還是那些想了解J2EE能帶來什么好處的項目管理者和系統(tǒng)分析員,相信本文一定很有參考價值。

    宏觀印象: 分布式結構和J2EE

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

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

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

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

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

    業(yè)務邏輯:業(yè)務邏輯適合用Session EJBs(后面將介紹)來實現(xiàn)。

    數(shù)據(jù)訪問:數(shù)據(jù)訪問適合用Entity EJBs(后面將介紹)和JDBC來實現(xiàn)。

    后臺系統(tǒng)集成: 同后臺系統(tǒng)的集成可能需要用到許多不同的技術,至于何種最佳需要根據(jù)后臺系統(tǒng)的特征而定。

    您可能開始詫異:為什么有這么多的層?事實上,多層方式可以使企業(yè)級應用具有很強的伸縮性,它允許每層專注于特定的角色。例如,讓Web服務器負責提供頁面,應用服務器處理應用邏輯,而數(shù)據(jù)庫服務器提供數(shù)據(jù)庫服務。

    由于J2EE建立在Java2平臺標準版(J2SE)的基礎上,所以具備了J2SE的所有優(yōu)點和功能。包括“編寫一次,到處可用”的可移植性、通過JDBC訪問數(shù)據(jù)庫、同原有企業(yè)資源進行交互的CORBA技術,以及一個經(jīng)過驗證的安全模型。在這些基礎上,J2EE又增加了對EJB(企業(yè)級Java組件)、Java servlets、Java服務器頁面(JSPs)和XML技術的支持。

    分布式結構與WebLogic應用服務器

    J2EE提供了一個框架--一套標準API--用于開發(fā)分布式結構的應用,這個框架的實際實現(xiàn)留給了第三方廠商。部分廠商只是專注于整個J2EE架構中的的特定組件,例如Apache的Tomcat提供了對JSP和servlets的支持,BEA系統(tǒng)公司則通過其WebLogic應用服務器產(chǎn)品為整個J2EE規(guī)范提供了一個較為完整的實現(xiàn)。

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

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

    J2EE技術

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

    Java Database Connectivity (JDBC)

    JDBC API以一種統(tǒng)一的方式來對各種各樣的數(shù)據(jù)庫進行存取。和ODBC一樣,JDBC為開發(fā)人員隱藏了不同數(shù)據(jù)庫的不同特性。另外,由于JDBC建立在Java的基礎上,因此還提供了數(shù)據(jù)庫存取的平臺獨立性。

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

    類型 1: JDBC-ODBC Bridge

    在JDBC出現(xiàn)的初期,JDBC-ODBC橋顯然是非常有實用意義的,通過JDBC-ODBC橋,開發(fā)人員可以使用JDBC來存取ODBC數(shù)據(jù)源。不足的是,他需要在客戶端安裝ODBC驅動程序,換句話說,必須安裝Microsoft Windows的某個版本。使用這一類型你需要犧牲JDBC的平臺獨立性。另外,ODBC驅動程序還需要具有客戶端的控制權限。

    類型 2: JDBC-native driver bridge

    JDBC本地驅動程序橋提供了一種JDBC接口,它建立在本地數(shù)據(jù)庫驅動程序的頂層,而不需要使用ODBC。 JDBC驅動程序將對數(shù)據(jù)庫的API從標準的JDBC調用轉換為本地調用。使用此類型需要犧牲JDBC的平臺獨立性,還要求在客戶端安裝一些本地代碼。

    類型 3: JDBC-network bridge

    JDBC網(wǎng)絡橋驅動程序不再需要客戶端數(shù)據(jù)庫驅動程序。它使用網(wǎng)絡上的中間服務器來存取數(shù)據(jù)庫。這種應用使得以下技術的實現(xiàn)有了可能,這些技術包括負載均衡、連接緩沖池和數(shù)據(jù)緩存等。由于第3種類型往往只需要相對更少的下載時間,具有平臺獨立性,而且不需要在客戶端安裝并取得控制權,所以很適合于Internet上的應用。

    類型 4: Pure Java driver

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

    WebLogic服務器為一些通常的數(shù)據(jù)庫提供了JDBC驅動程序,包括Oracle, Sybase, Microsoft SQL Server以及Informix。它也帶有一種JDBC驅動程序用于Cloudscape,這是一種純Java的DBMS,WebLogic服務器中帶有該數(shù)據(jù)庫的評估版本。

    以下讓我們看一個實例。

    JDBC實例

    在這個例子中我們假定你已經(jīng)在Cloudscape中建立了一個PhoneBook數(shù)據(jù)庫,并且包含一個表,名為 CONTACT_TABLE ,它帶有2個字段:NAME 和 PHONE。 開始的時候先裝載Cloudscape JDBC driver,并請求 driver manager得到一個對PhoneBook Cloudscape數(shù)據(jù)庫的連接。通過這一連接,我們可以構造一個 Statement 對象并用它來執(zhí)行一個簡單的SQL查詢。最后,用循環(huán)來遍歷結果集的所有數(shù)據(jù),并用標準輸出將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 BY name";
                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 here
                e.printStackTrace();
                }
                }
                }


    OK。接著我們來看一看JDBC是如何在企業(yè)應用中的進行使用。

    JDBC在企業(yè)級應用中的應用

    以上實例其實是很基本的,可能有些微不足道。它假定了一個2層結構。在一個多層的企業(yè)級應用中,更大的可能是在客戶端和一個EJB進行通信,該EJB將建立數(shù)據(jù)庫連接。為了實現(xiàn)和改進可伸縮性和系統(tǒng)性能, WebLogic服務器提供了對連接緩沖池connection pool的支持。

    Connection pool減少了建立和釋放數(shù)據(jù)庫連接的消耗。在系統(tǒng)啟動以后即可建立這樣的緩沖池,此后如故再有對數(shù)據(jù)庫的請求,WebLogic服務器可以很簡單地從緩沖池中取出數(shù)據(jù)。數(shù)據(jù)緩沖池可以在WebLogic服務器的 weblogic.properties 文件中進行定義。(可參考 weblogic.properties 文件中的例子,WebLogic服務器的文檔中還有更詳細的參考信息)

    在企業(yè)級應用的另一個常見的數(shù)據(jù)庫特性是事務處理。事務是一組申明statement,它們必須做為同一個statement來處理以保證數(shù)據(jù)完整性。缺省情況下JDBC使用 auto-commit 事務模式。這可以通過使用Connection類的 setAutoCommit() 方法來實現(xiàn)。

    現(xiàn)在我們已經(jīng)對JDBC有了一些認識,下面該轉向JNDI了。

    Java Naming and Directory Interface (JNDI)

    JNDI API被用于執(zhí)行名字和目錄服務。它提供了一致的模型來存取和操作企業(yè)級的資源如DNS和LDAP,本地文件系統(tǒng),后者在應用服務器中的對象。

    在JNDI中,在目錄結構中的每一個結點稱為context。每一個JNDI名字都是相對于context的。這里沒有絕對名字的概念存在。對一個應用來說,它可以通過使用 InitialContext 類來得到其第一個context:

    Context ctx = new InitialContext();


    應用可以通過這個初始化的context經(jīng)有這個目錄樹來定位它所需要的資源或對象。例如,假設你在Weblogic服務器中展開了一個EJB并將home接口綁定到名字 myApp.myEJB ,那么該EJB的某個客戶在取得一個初始化context以后,可以通過以下語句定位home接口:

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


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

    以上關于JNDI的討論只是冰山之一角而已。如果要更進一步地在context中查找對象,JNDI也提供了一些方法來進行以下操作: 

    將一個對象插入或綁定到context。這在你展開一個EJB的時候是很有效的。

    從context中移去對象。

    列出context中的所有對象。

    創(chuàng)建或刪除子一級的context。

    接下來,我們要開始關注EJB了。

    Enterprise Java Beans (EJB)

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

    EJB規(guī)范定義了3中基本的bean類型:

    Stateless session beans: 提供某種單一的服務,不維持任何狀態(tài),在服務器故障發(fā)生時無法繼續(xù)存在,生命期相對較短。例如,一個stateless session bean可能被用于執(zhí)行溫度轉換計算。

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

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

    盡管有以上的區(qū)別,所有的EJB還是有許多的共同之處。它們都處理home interface。它定義了一個客戶端是如何創(chuàng)建與消亡EJB的??梢栽赽ean中對定義了客戶端方法的遠程接口進行調用;bean類則執(zhí)行了主要的商務邏輯。

    描述EJB的開發(fā)已經(jīng)超出了本文的范圍。但是,如果一個EJB已經(jīng)被開發(fā)了或者從第三方進行了購買,它就必須在應用服務器中進行發(fā)布。WebLogic Server 5.1帶有一個EJB Deployer Tool來協(xié)助處理EJB的發(fā)布。當你使用EJB Deployer Tool的時候,你要定義客戶端所用的JNDI名字來定位EJB。Deployer Tool將生成wrapper類來處理和容器的通信以及在一個jar文件中把被請求的Java類綁定在一起。

    一旦EJB被發(fā)布,客戶端就可以使用它的JNDI名字來定位EJB。首先,它必須得到一個到home接口的reference。然后,客戶端可以使用該接口,調用一個 create() 方法來得到服務器上運行的某個bean實例的句柄;最后,客戶端可以使用該句柄在bean中調用方法。

    了解 EJB后,讓我們再來看JSP。

    JavaServer Pages (JSPs)

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

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

    Date JSP sample

    The current date is .

    您可能有時候聽說過JHTML。這是JSP以前的一種較老的標準。WebLogic服務器既可支持JSP,又可支持JHTML。請注意,在缺省狀況下,JSP在WebLogic服務器中并沒有處于有效狀態(tài)。要使之有效,你可以編輯weblogic.properties文件。如果Web服務器還沒有處于有效狀態(tài),則要先使之有效。Servlet的情況和JSP是一樣的。

    下面是: Java servlets

    Java servlets

    servlet提供的功能大多與JSP類似,不過實現(xiàn)的方式不同。JSP通常是大多數(shù)HTML代碼中嵌入少量的Java代碼,而servlets全部由Java寫成并且生成HTML。

    servlet是一種小型的Java程序,它擴展了Web服務器的功能。作為一種服務器端的應用,當被請求時開始執(zhí)行,這和CGI Perl腳本很相似。Servlets和CGI腳本的一個很大的區(qū)別是:每一個CGI在開始的時候都要求開始一個新的進程 -- 而servlets是在servlet引擎中以分離的線程來運行的。因此servlets在可伸縮性上提供了很好的改進。

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

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

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

    doPost(): 進行HTTP POST操作

    其它的方法還包括處理不同類型的HTTP請求 -- 可以參考HttpServlet API文檔。

    以上描述的是標準J2EE Servlet API的各種方法。WebLogic服務器提供了一個該API完整的實現(xiàn)途徑。一旦你開發(fā)了一個servlet,你就可以在weblogic.properties 中加以注冊并由此可以在WebLogic服務器中對它進行配置。

    通過Java servlets,我們已經(jīng)到達了J2EE主要技術的末尾了。但J2EE所提供的并不止于這些。下面的段落中我們將簡要地看一下現(xiàn)存的一些技術,包括RMI, Java IDL和CORBA, JTA, 以及XML,等等。

    Remote Method Invocation (RMI)

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

    Java IDL/CORBA

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

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

    JTA定義了一種標準的API,應用系統(tǒng)由此可以存取各種事務監(jiān)控。

    JTS是CORBA OTS事務監(jiān)控的基本的實現(xiàn)。JTS規(guī)定了事務管理器的實現(xiàn)方式。該事務管理器是在高層支持Java Transaction API (JTA)規(guī)范,并且在較底層實現(xiàn)OMG OTS specification的Java映像。JTS事務管理器為應用服務器、資源管理器、獨立的應用以及通信資源管理器提供了事務服務。

    JavaMail and JavaBeans Activation Framework

    JavaMail是用于存取郵件服務器的API,它提供了一套郵件服務器的抽象類。不僅支持SMTP服務器,也支持IMAP服務器。

    JavaMail利用JavaBeans Activation Framework (JAF)來處理MIME-編碼的郵件附件。MIME的字節(jié)流可以被轉換成Java對象,或者轉換自Java對象。由此大多數(shù)應用都可以不需要直接使用JAF。

    Java Messaging Service (JMS)

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

    Extensible Markup Language (XML)

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

    總結

    在本文中,我們介紹了建立在J2EE上的分布式應用結構,并且描述了WebLogic服務器對J2EE的各種支持。 然而,我們所揭示的僅僅是冰山之一角而已,要以一篇數(shù)千字的文章來展示J2EE潛在的對您的企業(yè)級應用的影響可是很不公平的。

    我們已經(jīng)關注了在您開始用J2EE進行工作時最有可能遇到的各類技術:JDBC, JNDI, EJB, JSP和servlet。我們也為您提供了一些尚未常見的J2EE技術的背景知識。不管您是一名開發(fā)人員,商務應用分析師,或者項目經(jīng)理,都應該對J2EE和WebLogic服務器所能提供給我們,給我們的企業(yè)以及我們的企業(yè)級應用所帶來的意義有一個更好的認識。



    Author: orangelizq
    email: orangelizq@163.com

    歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人
    posted on 2007-07-16 16:22 桔子汁 閱讀(208) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 亚洲AV无码国产丝袜在线观看 | 99re6在线精品视频免费播放| 精品成人免费自拍视频| 16女性下面扒开无遮挡免费| 7723日本高清完整版免费| 日韩中文字幕在线免费观看| 久久精品国产亚洲Aⅴ蜜臀色欲 | 久久亚洲AV永久无码精品| 久久亚洲精品视频| 亚洲午夜国产精品| 国产成人高清亚洲一区久久 | 可以免费看黄的网站| 国产a级特黄的片子视频免费| 中文字幕亚洲乱码熟女一区二区| 久久国产亚洲高清观看| 亚洲av无码偷拍在线观看| 中文无码日韩欧免费视频| 91精品免费在线观看| 亚洲视频在线一区二区| 亚洲国产精品久久久久秋霞影院| 国产AV无码专区亚洲AV蜜芽| 两个人看的www免费| 最近高清国语中文在线观看免费| 精品国产亚洲男女在线线电影 | free哆啪啪免费永久| 免费日韩在线视频| 亚洲国产香蕉碰碰人人| 黑人粗长大战亚洲女2021国产精品成人免费视频| 国产精品免费在线播放| 免费一本色道久久一区| 综合亚洲伊人午夜网 | 丰满亚洲大尺度无码无码专线| a毛片免费播放全部完整| 在线免费观看色片| 久久久影院亚洲精品| 亚洲a∨无码精品色午夜| 7x7x7x免费在线观看| 亚洲一区日韩高清中文字幕亚洲 | a级毛片视频免费观看| 免费特级黄毛片在线成人观看| 亚洲欧洲日产国码久在线观看|