官术网_书友最值得收藏!

1.4 Java EE技術(shù)框架

作為一個企業(yè)分布式應(yīng)用開發(fā)標(biāo)準(zhǔn)集,Java EE由一系列的企業(yè)應(yīng)用開發(fā)技術(shù)來最終實現(xiàn)。Java EE技術(shù)框架可以分為四個部分:組件技術(shù)、服務(wù)技術(shù)、通信技術(shù)和架構(gòu)技術(shù)。整個Java EE技術(shù)框架體系如圖1-4所示。

圖1-4 Java EE技術(shù)體系結(jié)構(gòu)

1.4.1 組件技術(shù)

組件是Java EE應(yīng)用的基本單元。Java EE 8提供的組件主要包括三類:客戶端組件、Web組件和業(yè)務(wù)組件。

1.客戶端組件

Java EE客戶端既可以是一個Web瀏覽器、一個Applet,也可以是一個應(yīng)用程序。

1)Web瀏覽器

Web瀏覽器又稱為瘦客戶。它通常只進行簡單的人機交互,不執(zhí)行如查詢數(shù)據(jù)庫、業(yè)務(wù)邏輯計算等復(fù)雜操作。

2)Applet

Applet是一個用Java語言編寫的小程序,運行在瀏覽器上的虛擬機里,通過HTTP等協(xié)議和服務(wù)器進行通信。

3)應(yīng)用程序客戶端

Java EE應(yīng)用程序客戶端運行在客戶端機器上,它為用戶處理任務(wù)提供了比標(biāo)記語言更豐富的接口。典型的Java EE應(yīng)用程序客戶端擁有通過Swing或AWT API建立的圖形用戶界面。應(yīng)用程序客戶端直接訪問服務(wù)器在EJB容器內(nèi)的EJB組件。當(dāng)然,Java EE客戶應(yīng)用程序也可像Applet客戶那樣通過HTTP連接與服務(wù)器的Servlet通信。與Applet不同的是,應(yīng)用程序客戶端一般需要在客戶端進行安裝,而Applet是通過Web下載,無須專門安裝。

2.Web組件

Web組件是在Java EE Web容器上運行的軟件程序。它的功能是基于HTTP協(xié)議對Web請求進行響應(yīng)。這些響應(yīng)其實是動態(tài)生成的網(wǎng)頁。用戶每次在瀏覽器上單擊一個鏈接或圖標(biāo),實際上是通過HTTP請求向服務(wù)器發(fā)出請求。Web服務(wù)器負責(zé)將Web請求傳遞給Web組件。Java EE平臺的Web組件對這些請求進行處理后生成動態(tài)內(nèi)容再通過Web容器返回給客戶端。

Java EE Web組件包括Servlet、JSP和WebSocket。

Servlet是Web容器里的程序組件。Servlet實質(zhì)上是動態(tài)處理HTTP請求和生成網(wǎng)頁的Java類。

JSP是Servlet的變形,它像是文本格式的Servlet,它的寫法有些像寫網(wǎng)頁,這樣就為應(yīng)用開發(fā)者(特別是不熟悉Java語言的)提供了方便,JSP在Web容器內(nèi)會被自動編譯為Servlet,編寫JSP比編寫Servlet程序更簡潔。

WebSocket用來實現(xiàn)客戶端與服務(wù)器之間基于連接的交互。

3.業(yè)務(wù)組件

業(yè)務(wù)組件指運行在圖1-3所示的業(yè)務(wù)邏輯層的組件,它們主要完成業(yè)務(wù)邏輯處理功能。業(yè)務(wù)組件包含EJB組件和Entity組件兩大類。EJB組件用于實現(xiàn)特定的應(yīng)用邏輯,而不是像Web組件一樣負責(zé)處理客戶端請求并生成適應(yīng)客戶端格式要求的動態(tài)響應(yīng)。EJB組件能夠從客戶端或Web容器中接收數(shù)據(jù)并將處理過的數(shù)據(jù)傳送到企業(yè)信息系統(tǒng)來存儲。由于EJB依賴Java EE容器進行底層操作,使用EJB組件編寫的程序具有良好的擴展性和安全性。

Java EE支持兩種類型的EJB組件:Session Bean(會話Bean)和Message-Driven Bean(消息驅(qū)動Bean)。

Entity組件主要用來完成應(yīng)用數(shù)據(jù)的持久化操作。

1.4.2 服務(wù)技術(shù)

Java EE容器為組件提供了各種服務(wù),這些服務(wù)是企業(yè)應(yīng)用經(jīng)常用到但開發(fā)人員難以實現(xiàn)的,例如,命名服務(wù)、部署服務(wù)、數(shù)據(jù)連接、數(shù)據(jù)事務(wù)、安全服務(wù)和連接框架等。現(xiàn)在這些服務(wù)已經(jīng)由容器實現(xiàn),因此Java EE組件只要調(diào)用這些服務(wù)就可以了。

1.命名服務(wù)

Java EE命名服務(wù)提供應(yīng)用組件(包括客戶、EJB、Servlet、JSP等)程序命名環(huán)境。在傳統(tǒng)的面向?qū)ο缶幊讨校绻粋€類A要調(diào)用另一個類B, A需要知道B的源程序然后在其中創(chuàng)建一個B的實例。當(dāng)一方程序改變時,就要重新編譯,而且類之間的連接比較混亂。JNDI(Java Naming and Directory Interface, Java命名和目錄服務(wù)接口)簡化了企業(yè)應(yīng)用組件之間的查找調(diào)用。它提供了應(yīng)用的命名環(huán)境(Naming Environment)。這就像一個公用電話簿,企業(yè)應(yīng)用組件在命名環(huán)境注冊登記,并且通過命名環(huán)境查找所需其他組件。

JNDI API提供了組件進行標(biāo)準(zhǔn)目錄操作的方法,例如,將對象屬性和Java對象聯(lián)系在一起,或者通過對象屬性來查找Java對象。

2.?dāng)?shù)據(jù)連接服務(wù)

數(shù)據(jù)庫訪問幾乎是任何企業(yè)應(yīng)用都需要實現(xiàn)的。JDBC(Java DataBase Connectivity, Java數(shù)據(jù)庫連接)API使Java EE平臺和各種關(guān)系數(shù)據(jù)庫之間連接起來。JDBC技術(shù)提供Java程序和數(shù)據(jù)庫服務(wù)器之間的連接服務(wù),同時它能保證數(shù)據(jù)事務(wù)的正常進行。另外,JDBC提供了從Java程序內(nèi)調(diào)用SQL數(shù)據(jù)檢索語言的功能。Java EE 8平臺使用JDBC 4.1。

3.Java事務(wù)服務(wù)

JTA(Java Transaction API, Java事務(wù)API)允許應(yīng)用程序執(zhí)行分布式事務(wù)處理——在兩個或多個網(wǎng)絡(luò)計算機資源上訪問并且更新數(shù)據(jù)。JTA用于保證數(shù)據(jù)讀寫時不會出錯。當(dāng)程序進行數(shù)據(jù)庫操作時,要么全部成功完成,要么一點也不改變數(shù)據(jù)庫內(nèi)容。最怕的是在數(shù)據(jù)更改過程中程序出錯,那樣整個系統(tǒng)的業(yè)務(wù)狀態(tài)和業(yè)務(wù)邏輯就會陷入混亂。所以,數(shù)據(jù)事務(wù)有一個“不可分微粒”的概念,是指一次數(shù)據(jù)事務(wù)過程不能間斷,JTA保證應(yīng)用程序的數(shù)據(jù)讀寫進程互相不干擾。如果一個數(shù)據(jù)操作能整個完成,它就會被批準(zhǔn);否則,應(yīng)用程序服務(wù)器就當(dāng)什么都沒做。應(yīng)用程序開發(fā)者不用自己實現(xiàn)這些功能,從而簡化了數(shù)據(jù)操作。數(shù)據(jù)事務(wù)技術(shù)使用JTA的API,它可以在EJB層或Web層實現(xiàn)。

4.安全服務(wù)

JAAS(Java Authentication Authorization Service, Java驗證和授權(quán)服務(wù))提供了靈活和可伸縮的機制來保證客戶端或服務(wù)器端的Java程序。Java早期的安全框架強調(diào)的是通過驗證代碼的來源和作者,保護用戶避免受到下載下來的代碼的攻擊。JAAS強調(diào)的是通過驗證誰在運行代碼以及他/她的權(quán)限來保護系統(tǒng)免受用戶的攻擊。它讓用戶能夠?qū)⒁恍?biāo)準(zhǔn)的安全機制,例如Solaris NIS(網(wǎng)絡(luò)信息服務(wù))、Windows NT、LDAP(輕量目錄存取協(xié)議)或Kerberos等通過一種通用的可配置的方式集成到系統(tǒng)中。

5.Java連接框架

JCA(Java Connector Architecture, Java連接框架)是一組用于連接Java EE平臺到企業(yè)信息系統(tǒng)(EIS)的標(biāo)準(zhǔn)API。企業(yè)信息系統(tǒng)是一個廣義的概念,它指企業(yè)處理和存儲信息數(shù)據(jù)的程序系統(tǒng),譬如企業(yè)資源計劃(ERP)、大型機數(shù)據(jù)事務(wù)處理以及數(shù)據(jù)庫系統(tǒng)等。由于很多系統(tǒng)已經(jīng)使用多年,這些現(xiàn)有的信息系統(tǒng)又稱為遺產(chǎn)系統(tǒng)(Legacy System),它們不一定是標(biāo)準(zhǔn)的數(shù)據(jù)庫或Java程序,例如,非關(guān)系數(shù)據(jù)庫等系統(tǒng)。JCA定義了一套擴展性強、安全的數(shù)據(jù)交互機制,解決了遺留系統(tǒng)與EJB容器和組件的集成問題。這使Java EE企業(yè)應(yīng)用程序能和其他類型的系統(tǒng)進行通話。

6.Web服務(wù)

Web服務(wù)通過基于XML的開放標(biāo)準(zhǔn)使企業(yè)之間進行信息連接,企業(yè)使用基于XML的Web服務(wù)描述語言(Web Services Description Language, WSDL)來描述它們的Web服務(wù)(比如銀行轉(zhuǎn)賬、價格查詢等);通過Internet,系統(tǒng)之間可以使用Web服務(wù)注冊來查找被登記的服務(wù)目錄,這樣實現(xiàn)了真正在Internet上的信息查詢和交換。Java的Web服務(wù)實現(xiàn)主要提供與XML和Web服務(wù)協(xié)議有關(guān)的API等。

7.上下文和依賴注入

上下文和依賴注入(Contexts and Dependency Injection, CDI)使得容器以類型安全的松耦合的方式為EJB等組件提供一種上下文服務(wù)。它將EJB等受控組件的生命周期交由容器來管理,降低了組件之間的耦合度,大大提高了組件的重用性和可移植性。

1.4.3 通信技術(shù)

Java EE通信技術(shù)提供了客戶和服務(wù)器之間及在服務(wù)器上不同組件之間的通信機制。Java EE平臺支持幾種典型的通信技術(shù):Internet協(xié)議、RMI(Remote Method Invocation,遠程方法調(diào)用)、OMGP(Object Manage Group Protocol,對象管理組協(xié)議)、消息技術(shù)(Messaging)等。

1.Internet協(xié)議

Java EE平臺能夠采用通用的Internet協(xié)議實現(xiàn)客戶服務(wù)器和組件之間的遠程網(wǎng)絡(luò)通信。

TCP/IP(Transport Control Protocol over Internet Protocol,互聯(lián)協(xié)議之上的傳輸控制協(xié)議)是Internet在傳輸層和Web層的核心通信協(xié)議。

HTTP是在互聯(lián)網(wǎng)傳送超文本文件的協(xié)議。HTTP消息包括從客戶端到服務(wù)器的請求和從服務(wù)器到客戶端的響應(yīng),HTTP協(xié)議和Web瀏覽器被稱為Internet最普及和最常用的功能。大多數(shù)Web服務(wù)器都提供HTTP端口和互聯(lián)網(wǎng)進行通信,在HTTP之上的SOAP(Simple Object Access Protocol,簡單對象訪問協(xié)議)成為受到廣泛關(guān)注的Web服務(wù)基礎(chǔ)協(xié)議。目前使用最廣泛的版本為HTTP 1.1,不過隨著HTTP 2以更優(yōu)異的性能和安全性被廣泛應(yīng)用,Java EE 8規(guī)范中也提供了對HTTP 2的支持。

SSL 3.0(Secure Socket Layer,安全套接字層)是Web的安全協(xié)議。它在TCP/IP之上對客戶和服務(wù)器之間的Web通信信息進行加密而不被竊聽,它可以和HTTP共同使用(即HTTPS)。服務(wù)器可以通過SSL對客戶進行驗證。

2.RMI

RMI是Java的一組用于開發(fā)分布式應(yīng)用程序的API。RMI使用Java語言接口定義了遠程對象(在不同機器操作系統(tǒng)的程序?qū)ο螅Y(jié)合了Java序列化(Java serialization)和Java遠程方法協(xié)議(Java Remote Method Protocol)。簡單地說,這樣使原先的程序在同一操作系統(tǒng)的方法調(diào)用,變成了不同操作系統(tǒng)之間程序的方法調(diào)用。由于Java EE是分布式程序平臺,它以RMI機制實現(xiàn)程序組件在不同操作系統(tǒng)之間的通信。比如,一個EJB可以通過RMI調(diào)用網(wǎng)絡(luò)上另一臺機器上的EJB遠程方法。

3.OMGP

OMGP協(xié)議允許在Java EE平臺上的對象通過CORBA技術(shù)和遠程對象通信。CORBA對象以IDL(Interface Define Language,接口定義語言)定義,程序?qū)ο笠訧DL編譯器使對象和ORB(Object Request Broker,對象請求中介)連接;ORB就像是程序?qū)ο笾g的介紹人,它幫助程序?qū)ο笙嗷ゲ檎液屯ㄐ牛琌RB使用IIOP(Internet Inter-ORB Protocol, Internet間對象請求代理協(xié)議)和對象進行通信;OMG是一個廣義的概念,Java EE平臺要使用Java IDL和RMI-IIOP來實現(xiàn)OMG。

4.Java通信服務(wù)技術(shù)

Java EE結(jié)合使用RMI和OMG來提供組件間的通信服務(wù)。Java IDL允許Java客戶通過CORBA調(diào)用使用IDL定義了的遠程對象,它屬于Java標(biāo)準(zhǔn)版的技術(shù),它提供的編譯器可以根據(jù)CORBA對象生成樁(stub, Java客戶端接口);Java客戶連接樁并以CORBA API訪問CORBA對象,編寫Java RMI和CORBA的程序比較復(fù)雜,Java EE應(yīng)用服務(wù)器的好處是將此過程進行了簡化,開發(fā)人員可以不必考慮很多多層RMI和CORBA的細節(jié),只要理解其基本概念和使用方法就夠了。

5.Java消息技術(shù)和郵件技術(shù)

JMS(Java Message Service, Java消息服務(wù))API允許Java EE應(yīng)用程序訪問企業(yè)消息系統(tǒng),例如,IBM MQ系列產(chǎn)品和JBoss的JBossMQ。在Java EE平臺上,消息服務(wù)依靠消息EJB來實現(xiàn)。

Java郵件(Java Mail)API提供能進行電子郵件通信的一套抽象類和接口。它們支持多種電子郵件格式和傳遞方式。Java應(yīng)用可以通過這些類和接口收發(fā)電子郵件,也可以對其進行擴充。

1.4.4 架構(gòu)技術(shù)

在Java EE 6之前的Java EE規(guī)范中,主要從微觀的角度來規(guī)范企業(yè)應(yīng)用的開發(fā),關(guān)注的重點在組件級別上如何處理應(yīng)用服務(wù)器與客戶端的交互以及Java EE組件與容器之間的交互。但隨著Java EE的廣泛應(yīng)用,在Java EE企業(yè)應(yīng)用的構(gòu)建過程中一些架構(gòu)層面上的共性問題(如頁面導(dǎo)航、國際化、數(shù)據(jù)持久化、輸入校驗等)逐漸顯現(xiàn)。這些問題是每個Java EE開發(fā)人員構(gòu)建企業(yè)應(yīng)用時幾乎必然遇到的,但Java EE規(guī)范并沒有對此給出答案,因此,各種第三方架構(gòu)大行其道,如Struts 2、Hibernate、Spring、Seam等。這些眾多的框架給開發(fā)人員帶來很大的學(xué)習(xí)壓力,也給Java EE服務(wù)器廠商帶來更多的麻煩,限制了他們?yōu)镴ava EE應(yīng)用提供更高級的支持。因此,從Java EE 6規(guī)范開始,Java EE吸收了業(yè)界流行的架構(gòu)的優(yōu)點,增加了架構(gòu)方面的一些標(biāo)準(zhǔn)規(guī)范。

1.JSF

JSF(Java Server Faces)是一種用于構(gòu)建Java EE Web應(yīng)用表現(xiàn)層的框架標(biāo)準(zhǔn)。它提供了一種以組件為中心的事件驅(qū)動的用戶界面構(gòu)建方法,從而大大簡化了Java EE Web應(yīng)用的開發(fā)。通過引入基于組件和事件驅(qū)動的開發(fā)模式,使開發(fā)人員可以使用類似于處理傳統(tǒng)桌面應(yīng)用界面的方式來開發(fā)Web應(yīng)用程序。JSF還通過將良好構(gòu)建的模型-視圖-控制器(MVC)設(shè)計模式集成到它的體系結(jié)構(gòu)中,使行為與表達清晰分離,確保了應(yīng)用程序具有更高的可維護性。Java EE 8規(guī)范中包含的JSF的版本為2.3。

2.JPA

持久化對于大部分企業(yè)應(yīng)用來說都是至關(guān)重要的,因為企業(yè)應(yīng)用中的大部分信息都需要持久化存儲到關(guān)系數(shù)據(jù)庫等永久介質(zhì)中。盡管有不少選擇可以用來構(gòu)建應(yīng)用程序的持久化層,但是并沒有一個統(tǒng)一的標(biāo)準(zhǔn)可以用在Java EE環(huán)境中。作為Java EE規(guī)范中的一部分,JPA(Java Persistence API, Java持久化應(yīng)用接口)規(guī)范了Java平臺下的持久化實現(xiàn),大大提高了應(yīng)用的可移植性。Java EE 8規(guī)范中包含的JPA的版本為2.2。

3.Bean Validation

輸入校驗是企業(yè)應(yīng)用中一項重要又十分煩瑣的任務(wù)。在Java EE分層架構(gòu)的應(yīng)用中,每一層都需要對企業(yè)數(shù)據(jù)進行校驗。然而對于同一個業(yè)務(wù)數(shù)據(jù)多次重復(fù)實現(xiàn)同樣的驗證邏輯并不是好的設(shè)計方法,它既容易出錯,還降低了應(yīng)用可維護性。為實現(xiàn)企業(yè)數(shù)據(jù)的統(tǒng)一校驗,Java EE提出了Bean Validation規(guī)范。Java EE 8規(guī)范中包含的Bean Validation的版本為2.0。

4.Java EE優(yōu)點

Java EE體系架構(gòu)具有以下優(yōu)點:

(1)獨立于硬件配置和操作系統(tǒng)。Java EE應(yīng)用運行在JVM(Java Virtual Machine, Java虛擬機)上,利用Java本身的跨平臺特性,獨立于硬件配置和操作系統(tǒng)。JRE(Java 2 Runtime Environment, Java運行環(huán)境)幾乎可以運行于所有的硬件/操作系統(tǒng)組合之上。因此Java EE架構(gòu)的企業(yè)應(yīng)用使企業(yè)免于高昂的硬件設(shè)備和操作系統(tǒng)的再投資,保護已有的IT投資。

(2)堅持面向?qū)ο蟮脑O(shè)計原則。作為一門完全面向?qū)ο蟮恼Z言,Java幾乎支持所有的面向?qū)ο蟮某绦蛟O(shè)計特征。面向?qū)ο蠛突诮M件的設(shè)計原則構(gòu)成了Java EE應(yīng)用編程模型的基礎(chǔ)。Java EE多層結(jié)構(gòu)的每一層都有多種組件模型。因此開發(fā)人員所要做的就是為應(yīng)用項目選擇適當(dāng)?shù)慕M件模型組合,靈活地開發(fā)和裝配組件,這樣不僅有助于提高應(yīng)用系統(tǒng)的可擴展性,還能有效地提高開發(fā)速度,縮短開發(fā)周期。

(3)靈活性、可移植性和互操作性。利用Java的跨平臺特性,Java EE組件可以很方便地移植到不同的應(yīng)用服務(wù)器環(huán)境中。這意味著企業(yè)不必再拘泥于單一的開發(fā)平臺。Java EE的應(yīng)用系統(tǒng)可以部署在不同的應(yīng)用服務(wù)器上,在全異構(gòu)環(huán)境下,Java EE組件仍可彼此協(xié)同工作。這一特征使得裝配應(yīng)用組件首次獲得空前的互操作性。

(4)輕松的企業(yè)信息系統(tǒng)集成。Java EE技術(shù)出臺后不久,很快就將JDBC、JMS和JCA等一批標(biāo)準(zhǔn)歸納于自身體系之下,這大大簡化了企業(yè)信息系統(tǒng)整合的工作量,方便企業(yè)將諸如遺產(chǎn)系統(tǒng)、ERP和數(shù)據(jù)庫等多個不同的信息系統(tǒng)進行無縫集成。

(5)旺盛的生命力。Java EE規(guī)范秉著兼容包并的原則,版本一直在持續(xù)進化,對企業(yè)應(yīng)用開發(fā)中不斷涌現(xiàn)的新技術(shù)(如HTML5、JSON等)及時提供支持。

主站蜘蛛池模板: 乐陵市| 邓州市| 汶川县| 曲阳县| 乐陵市| 通许县| 井冈山市| 遂川县| 滨州市| 长沙市| 凤台县| 彭阳县| 澄江县| 广饶县| 当涂县| 临沧市| 睢宁县| 麦盖提县| 普宁市| 沂源县| 黔西县| 无为县| 漠河县| 万盛区| 安化县| 沿河| 镇赉县| 大冶市| 堆龙德庆县| 金沙县| 贵定县| 大埔区| 秦皇岛市| 县级市| 大城县| 宝兴县| 尚义县| 绥棱县| 万安县| 邵阳县| 宜丰县|