【正文】
021,20(5):556]。 JavaEE 中主要的技術規(guī)范 ]如下: a. JSP(Java Server Pages): JSP頁面由 HTML頁面和嵌入其中的 Java代碼片段所組成,是對 HTML的一種擴展,它可以通過一些特殊的標簽向靜態(tài) HTML頁面插入動態(tài)信息。 JSP技術是由 Sun微系統(tǒng)公司所倡導并于 1999年推出的一套動態(tài)網頁技術標準,它是基于 Java技術的、在服務器端執(zhí)行的動態(tài)網頁技術。簡單的說, JSP技術簡化了開發(fā)動態(tài)網站的過程,使用 JSP技術。開發(fā)者和設計人員可以使用 Java和簡單的標簽把動態(tài)的內容合并到網站中 [DUANE ,MARK ,SHAWN In Action, USA: Manning Publications Co., 2021:2。 b. Servlet: Servlet 實質上是一種小型的、與平臺無關的 Java 類,它被JavaEE 容器編譯成與平臺無關的字節(jié)碼,并接受容器管理,服從容器調用。 容器可以根據用戶請求將這些字節(jié)碼動態(tài)的加載到 Web 服務器上,由 Web 服務器負責這些字節(jié)碼的運行??傮w而言, Servlet就是接受容器管理,通過 Web 服務器實現的 “請求 響應 ”模型與客戶機進行交互。 c. EJB(Enterprise JavaBeans): EJB 提供了一個框架來開發(fā)和實施分布式的商務邏輯,從而簡化了可伸縮和高度復雜的企業(yè)級應用開發(fā)。 EJB規(guī)范定義了 EJB 組件在何時、如何與它們的容器進行交互作用。 EJB服務器通過為中間件服務 (例如:事務處理、安全性、數據庫連接以及其它 )提供自動支持,降低了開發(fā)中間件 的復雜度。 d. JDBC(Java Database Connectivity: Java 數據庫連接 ): JDBC 為訪問不同的數據庫提供了統(tǒng)一的標準 SQL(Structured Query Language:結構化查詢語言 )數據庫訪問接口, JDBC 對開發(fā)者屏蔽了一些細節(jié)問題,將開發(fā)者和私有數據庫隔離開來。由于建立在 Java 基礎之上,JDBC 提供了對數據庫的訪問具有平臺無關性。 e. RMI(Remote Method Invoke:遠程方法調用 ): RMI 是分布式對象應用程序中的一種重要機制。它允許使用接口來定義遠程對象, 并可調用這些遠程對象上的方法,就像調用本地對象的方法一樣。 f. JavaMail: JavaMail 是用于訪問郵件服務器的 API,可以作為發(fā)送和接收電子郵件的抽象工具。 JavaMail 支持使用最的 Inter 郵件協議,如 IMAP POP3 和 SMTP。 g. JTA(Java Transaction API: Java 事務 API): JTA 提供了 JAVAEE 中處理事務的標準接口,它支持事務的開始、回滾和提交。 h. JNDI(Java Naming and Directory Interface: Java 命名和目錄接口 ):JNDI 定位各種對象, JNDI API 為應用程序提供了一個統(tǒng)一的接口來完成標準的目錄操作。 i. JMS(Java Message Service: Java 消息服務 ):在企業(yè)環(huán)境中,不同的分布式組件可能不會總之彼此持續(xù)接觸。因此,需要有一種機制進行異步數據發(fā)送。 JMS 通過使用面向消息的中間件提供了這種發(fā)送和接收消息的功能。 j. JAF(JavaBeans Activation Framework, JavaBeans 激活框架 ) Struts 框架 由于 MVC本身就是一個非常復雜的系統(tǒng) , 所以采用 MVC實 現 Web應用時 , 最好選一個現成的 MVC框架 , 在此之下進行開發(fā) , 從而取得事半功倍的效果[22]。因此,在系統(tǒng)的開發(fā)過程中引入了 Struts框架,實現 MVC模式。 Struts 框架 (Struts framework)[ Struts 框架是由Craig . R . McClanahan 設計發(fā)明的。 Struts 是 Apache 軟件組織 (Apache Software Foundation: ASF)主持的 Jakarta 項目的一個組成部分 [Ted Husted,Cedric Dumoulin,Gee Franciscus,David Winterfeldt. Struts In Action[M], USA:Manning Publications Co.,2021,8] ,它是 一 個 基 于 請 求 相 應(RequestResponse)驅動模式的應用 MVC 框架的邏輯結構,但是主要是提供了一套好的控制器標準和一套定制的標簽庫。 Struts 框架具有 MVC 的一系列優(yōu)點:結構層次明確、重用性高 、有極強的健壯性與可伸縮性、方便開發(fā)設計的分工,而且 Struts 框架提供了權限控制、數據校驗、國際化支持和日志功能等。 Struts 框架與其它技術框架如: Spring、 Hibernate 可以很好的整合。這樣就大大提高了開發(fā)效率。 作為一個開源項目, Struts 框架主要是采用 Servlet(MVC 模式中的業(yè)務邏輯 )和 JSP(MVC 模式中的顯示邏輯 )技術實現,是基于 Sun 的 JavaEE 平臺的MVC 框架,即:充分的發(fā)揮了 MVC 模式的 “顯示邏輯與業(yè)務邏輯相分離 ”[Consoli John. Model Struts for UPN[J]. Media Week, 2021, 14(10):710]。Struts 在其成長中不斷的經歷了實戰(zhàn)檢驗,其功能體系也日趨完善。 框架 (Framework)是用于解決相同或者相類似的問題的方案。這種方案具有高重用型、擴展性和伸縮性的特點。 Struts 框架體系結構如圖 43 所示[,202107]: C l i e n t B r o w s e rV i e w J S PM o d e lA p p l i c a t i o n S t a t eB u s i n e s s L o g i cA v t i o nC o n t r o l l e rS e r v l e tS t r u t s c o n f i g . x m lE v e n tH t t p R e q u e s tD i s p a t c hF o r w a r dG e t T a g U p d a t eH t t p R e s p o n s e 圖 43 Struts 框架的體系結構 Struts 框架提供的 3 個關鍵組件如下: a. 請求 (request)組件:代表用戶請求目標的地標準 URI(Universal Resource Identifier:通用資源標識 )地址; b. 響應 (response)組件:用于將用戶請求的資源轉發(fā)特定的地址; c. 標簽庫 (tag library):用于幫助開發(fā)人員使用服務器頁面 (server pages)建立互動應用。 Spring 框架 Spring 的思想是由 Rod Johnson 提出、設計并在其書《 Expert OneonOne: JAVAEE Design and Development》中詳細闡明其思想的的一種開源技術框架 , Spring 的提出使得過去常常需要使用 EJB 才能完成的功能現在只需要使用普通 JavaBean 就可以完成,這樣就使得開發(fā)企業(yè)級應用更為簡單方便 [Craig Walls,Ryan Breidenbach. Spring In Action [M]. USA:Manning Publications, 2021:4]。 Spring 是一個輕量級的非入侵式的容器,它為軟件開發(fā)提供了全方位支持的應用程序框架。通常在 Web 應用中, Spring 主要被用來實現業(yè)務邏輯層。 Spring 的特性如下: a. 輕量 (Lightweight): Spring 的 Jar 包不到 1MB,而且所有的庫都是使用Java 原生 API 開發(fā),使用 Spring 開發(fā)出的功能類,不需要依賴于 Spring的 Jar 包就可以順利運行 (也就是所謂的非入侵式 ); b. 控制反轉 (Inversion of Control: IOC):也被稱為依賴注入 (Dependency Injection: DI),使用 web 容器管理對象與對象之間的依賴關系,而不是由對象自身來管理這種依賴關系。通俗地說,就是在程序 中對象的創(chuàng)建利用 XML 文件進行注入,而不是在程序中使用硬編碼的方式完成對象的創(chuàng)建工作; c. 面向切面的程序設計 (Aspect Oriented Programming: AOP): AOP 思想最初是由施樂公司的 Xerox 研究中心 (Xerox PARC)在 20 世紀 90 年代發(fā)明的一種程序范式 [28],它的核心思想是:把組成應用的各個類看作不同的切面,這樣就可以把橫跨多個業(yè)務邏輯、又與應用核心業(yè)務邏輯無關、但是又是必須的業(yè)務邏輯 (例如:安全檢查、日志處理、事物控制 )從各個業(yè)務邏輯類中分離出來,并把這些非核心業(yè)務邏輯組成 單 獨的模塊 (這些模塊被稱為切面 ),然后通過織入 (Weaving)的方法,將切面整合到應用的流程中。這樣,不但使得應用的解耦和性得到了大幅度的提高,而且使得程序更加易于維護。 Spring 框 架 是 由 多 個 模 塊 組 成 的 , 如 圖 44 所示ntroductionoverview]: 圖 25 Spring 框架的模塊組成 由于 Java 是一種解釋型 語言,這就意味著應用中很多對象的創(chuàng)建工作是在程序運行過程中完成的,而為了降低耦合性,就需要使用到工廠方法模式 (包括簡單工廠、工廠方法、抽象工廠方法 ),這樣程序中就出現了大量的工廠類。而 Spring 將這些對象的創(chuàng)建工作配置在 XML 文件中,這樣對象的創(chuàng)建工作就由容器負責完成。因此 Spring 的引入就有效的解決了程序中大量工廠類存在的問題。 Hibernate 框架 Hibernate框架是 Gavin King于 2021年開發(fā)出的 ORM框架。 Hibernate的目標是完全解決 Java中數據持久化的問 題 [Christian Bauer, Gavin King. Hibernate In Action [M].USA:Manning Publications, 2021:2]。 Java 是一種面向對象的編程語言,然而,目前所投入市場并實際應用的 數據庫都是關系型數據據庫。這兩者之間存在著軟件的對象模型與數據庫的關系模型模型不匹配的問題。 要使用面向對象的編程語言持久化 (注:本文中所提到的持久化是指與數據庫相關的所有操作 )關系型數據庫,解決方案有如下 3 種: a. 使用 JDBC 手工操作; b. 使用 ORM(Object Relation Mapping 對象關系映射 )框架解決。使用ORM 框架負責持久化的對象是 POJO; c. 使用 CMP(ContainerManaged Persistence 容器管理實體持久化 )方案。使用 CMP 方案負責持久化的對象是 EJB 組件。 以上三個方案的比較如下: a) 使用 JDBC 手工操作會導致不得不編寫出大量的數據庫操作代碼,這將會迫使系統(tǒng)的開發(fā)周期延長; b) 使用 CMP 方案,由于在該方案中負責持久化的對象是 EJB 組件,而采用的 EJB 組件模型中的實體 Bean(Entity Bean)把由對象模型表示的對象映射 到基于 SQL 的關系模型數據結構中去將會顯得非常笨拙 , 而且 開發(fā) EJB 是一個緩慢、繁復的過程,而且還要等待組件的部署工作的完成 并且會消耗大量的時間和精力。 c) 使用 ORM方案則沒有 JDBC 方案和 CMP方案中所述的問題。 Hibernate則是進行 ORM 方案的最佳選擇之一。在 Hibernate 中 POJO 是對 EJB的替換,相對于 EJB, POJO 僅僅是一個簡單的 Java 對象,它不需要實現在 EJB 中定義的諸如安全、管理和持久化等接口。 Hibernate 的 ORM 的本質是負責建立并維護對象與對應的數據庫表記錄的映射關系,這包 括兩個方面: a. Hibernate 負責將對象數據 (是內存中的一個空間,當實例化一個實體類時, Hibernate 就會在內存中新建一塊空間,用于存儲該實例的信息 )按照映射文件中定義的映射規(guī)則,以記錄的形式存儲到對應的數據庫表中; b. 當需要讀出數據庫表中的數據時, Hibernate 按照映射文件中定義的映射規(guī)則,將數據庫表中的記錄加載到計算機內存中,此時,Hibernate 在內存中建立好對象,并根據映射文件中定義的映射規(guī)則 恢復對象與對應數據庫記錄的映射關系。 AJAX AJAX(Asynchronous JavaScript+ XML:異步的 JavaScript 和 XML): AJAX不是一種獨立的技術,而是綜合運用很多老技術融合成的一個思想。是構建網頁的一種綜合使用 JavaScript 和 XML