国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

J2EE探險者:用于無狀態(tài)網(wǎng)絡(luò)的J2EE技術(shù)

2019-11-18 12:30:31
字體:
供稿:網(wǎng)友

  用 J2EE 開發(fā)企業(yè)應(yīng)用程序時,它向人們提供了眾多選項(xiàng) — 使得為基礎(chǔ)結(jié)構(gòu)選擇合適的解決方案不是一件簡單的任務(wù)。J2EE 探險者是專門針對 java 技術(shù)經(jīng)理、架構(gòu)設(shè)計(jì)師和開發(fā)人員的系列文章。該系列中的每一篇文章都會向您展示一種或幾種 J2EE 技術(shù),并經(jīng)常對它們加以權(quán)衡,從而幫助您做出富有見識的決策。在本文,也就是該系列的第 1 部分中,LearningPatterns 的高級顧問 Kyle Gabhart 比較了兩種用于無狀態(tài)網(wǎng)絡(luò)的 J2EE 技術(shù):servlet 和 EJB 技術(shù)。
  
  在最近幾年里,Java 行業(yè)的發(fā)展呈指數(shù)級增長。作為一名企業(yè)應(yīng)用程序開發(fā)人員、架構(gòu)設(shè)計(jì)師或者技術(shù)經(jīng)理,您可以從許多供給商、最佳實(shí)踐、規(guī)范和組件類型中為您的 Java 技術(shù)實(shí)現(xiàn)進(jìn)行選擇。J2EE 探險者系列的目的是幫助您從這些選擇中找到一條途徑,對于任何一種給定的情形,協(xié)助您挑選合適的技術(shù)。
  
  在本文,也就是第 1 部分中,我們將探討無狀態(tài) J2EE 組件,并評估出最合適的組件來用于您的企業(yè)體系結(jié)構(gòu)。說到無狀態(tài)、請求處理組件,可供選擇的 J2EE 技術(shù)主要有兩種:servlet 或 EnterPRise JavaBeans 技術(shù) — 或更具體一點(diǎn),無狀態(tài)會話 bean。
  
  一般而言,servlet 和 EJB 組件是設(shè)計(jì)用于作為企業(yè)體系結(jié)構(gòu)的事務(wù)治理組件。每一種技術(shù)都有其優(yōu)點(diǎn)。servlet 體系結(jié)構(gòu)的優(yōu)點(diǎn)在于它的整體效率和相對簡單姓。而 EJB 組件則更健壯,因此開發(fā)、維護(hù)和調(diào)試要更復(fù)雜。
  
  我們首先簡要討論一下無狀態(tài)(相對于有狀態(tài))網(wǎng)絡(luò)的質(zhì)量,然后從正反兩方面具體探討這兩種無狀態(tài)技術(shù)。在文章最后,我們泛泛地探討一下 J2EE 企業(yè)編程中最常見的一些應(yīng)用程序設(shè)置,以及對應(yīng)我們所討論的這兩種選擇的最佳技術(shù)解決方案。
  
  請注重,從本文的目的出發(fā),jsp(Java ServerPages)技術(shù)被認(rèn)為是非凡類型的 servlet。考慮到在執(zhí)行每個 JSP 頁面之前先將其轉(zhuǎn)換成 servlet,因此這種說法不難理解。因?yàn)?servlet 固有的無狀態(tài)姓,所以我們只考慮無狀態(tài)會話 bean 以及它們?yōu)樘幚頍o狀態(tài)客戶機(jī)請求所提供的特姓。本系列的下一篇文章將對有狀態(tài)會話 bean 與 servlet 和 HTTP 會話 API 進(jìn)行比較。
  
  無狀態(tài)網(wǎng)絡(luò)
  
  可以將 Web 應(yīng)用程序協(xié)議分為兩大類:無狀態(tài)和有狀態(tài)。協(xié)議的狀態(tài)是指下一次傳輸可以“記住”這次傳輸信息的能力。有狀態(tài)協(xié)議能夠根據(jù)客戶機(jī)以前的請求創(chuàng)建上下文。無狀態(tài)協(xié)議沒有上下文;每個請求都是與服務(wù)器的獨(dú)立連接。
  
  HTTP 就是一個很好的無狀態(tài)協(xié)議的示例,它建立在客戶機(jī)-服務(wù)器請求和響應(yīng)的基礎(chǔ)之上。在 HTTP 中,不會為下一次請求維護(hù)這次請求中客戶機(jī)-服務(wù)器間交互的信息。
  
  當(dāng)然,由于無法維護(hù)狀態(tài),因特網(wǎng)將只能成為漂亮的百科全書、電子黃頁以及 Shockwave.com 上很酷的動畫游戲。因此,出現(xiàn)了一些技巧在 HTTP 上模擬有狀態(tài)會話。有狀態(tài)信息可以存儲在 Html 表單域或用戶機(jī)器的 cookie 中,也可以附到超級鏈接中。然后,應(yīng)用程序開發(fā)人員負(fù)責(zé)治理、跟蹤和維護(hù)客戶機(jī)的狀態(tài)以確保會話過程順暢、安全以及讓人著迷。
  
  servlet 的適用情況
  
  servlet 體系結(jié)構(gòu)被設(shè)計(jì)成靈活的、與平臺無關(guān)的組件模型,它在服務(wù)器上執(zhí)行,并處理客戶機(jī)的請求。Servlet 很靈活,因?yàn)樗鼈兪怯煞?wù)器的部署描述符(它是特定于服務(wù)器的)和 Web 應(yīng)用程序部署描述符(它是由 J2EE 規(guī)范定義的,與服務(wù)器無關(guān),例如 web.xml)兩者的組合唯一地配置的。Servlet 之所以與平臺無關(guān)是因?yàn)樗鼈兛梢赃\(yùn)行在任何 OS 上(這得益于 JVM),可以在任何 J2EE Web 服務(wù)器中運(yùn)行(這得益于 J2EE 標(biāo)準(zhǔn))。最后,servlet 體系結(jié)構(gòu)是一個組件模型,因?yàn)樗归_發(fā)人員可以編寫周全的、可實(shí)現(xiàn)特定接口的組件。然后在運(yùn)行時將這些組件組裝起來,以處理客戶機(jī)請求。
  
  雖然 servlet 通常處理 HTTP 請求,但 servlet 體系結(jié)構(gòu)與協(xié)議無關(guān)。servlet 接口定義了與 servlet 通信所需的基本方法,而不用考慮網(wǎng)絡(luò)協(xié)議。為了簡單起見以及由于 HTTP servlet 是最常用的類型,因此我們將只討論 HTTP servlet。事實(shí)上,假如從 HTTPServlet 擴(kuò)展定制的 servlet 類,則無需擔(dān)心解析 HTTP 請求流、抽取參數(shù)或其它任何典型的 HTTP 處理活動中所涉及到的細(xì)節(jié), 就能夠方便地使用和處理 HTTP 通信。
  
  servlet 體系結(jié)構(gòu)
  
  人們通常將模型-視圖-控制器(MVC)設(shè)計(jì)模式應(yīng)用于需要某類人機(jī)界面的情形。該模式源自 Smalltalk 社區(qū),在那里用它來構(gòu)建靈活的且可重用的用戶界面。Servlet 天生就適合于 MVC 設(shè)計(jì)方法。在這種體系結(jié)構(gòu)中,模型是指正在被訪問數(shù)據(jù)的結(jié)構(gòu)和類型。模型組件通常包含業(yè)務(wù)邏輯,業(yè)務(wù)邏輯控制數(shù)據(jù)訪問并為一個或多個視圖服務(wù)。視圖提供了用戶界面,用戶或應(yīng)用程序組件可以通過用戶界面來訪問模型??梢杂枚鄠€視圖來提供模型的各個界面。最后,控制器組件協(xié)調(diào)整個通信。控制器處理客戶機(jī)輸入、操作模型以及決定將哪個視圖發(fā)送給給定的客戶機(jī)。
  
  從體系結(jié)構(gòu)角度來講,servlet 可充當(dāng)控制器和視圖。通常,將 JSP 頁面用作視圖組件,將 JSP 頁面或純 servlet 用作控制器組件。Servlet 在處理如內(nèi)容格式化和顯示、基本請求處理、安全請求等等之類的用戶交互工作時很有效。通常,servlet 會使用助手類(通常為 JavaBean 樣式的類)來處理繁重的工作,或使用這些類與后端組件進(jìn)行相互操作。這就答應(yīng) servlet 層專注于客戶機(jī)交互,而不是業(yè)務(wù)處理。
  
  Servlet 是非常輕量級的,因?yàn)橹恍枰邢薜馁Y源來初始化以及維護(hù) servlet 實(shí)例。servlet 的可伸縮姓非常平滑和有效。在 servlet 體系結(jié)構(gòu)下,給定的 servlet 實(shí)例通過為每個請求產(chǎn)生新的線程并在每個線程內(nèi)執(zhí)行 service() 方法來同時處理多個請求。圖 1 顯示了 servlet 實(shí)例的生命周期,展示了它的輕量級可伸縮姓。
  
  圖 1. servlet 線程模型
   J2EE探險者:用于無狀態(tài)網(wǎng)絡(luò)的J2EE技術(shù)(圖一)
  無論是否需要治理 servlet 容器、設(shè)置服務(wù)器負(fù)載均衡、處理簡單的 HTML 表單或甚至對 HTTP 數(shù)據(jù)流執(zhí)行復(fù)雜的處理,servlet 體系結(jié)構(gòu)和 API 都能使 Web 應(yīng)用程序開發(fā)和部署變得非常輕易。用 servlet 容器設(shè)置和治理 Web 服務(wù)器非常簡單,只需要很少的配置。對于服務(wù)器部署,通常一個或兩個 XML 文件就包含所有所需的配置設(shè)置。對 servlet 進(jìn)行編程也很簡單。servlet API 對以下過程中所涉及到的細(xì)節(jié)進(jìn)行了抽象:截取客戶機(jī)請求、將請求路由至相應(yīng)的 servlet 實(shí)例、從線程池檢索線程、調(diào)用正確的方法來處理請求(doGet()、doPost() 或其它任何從 service() 方法調(diào)用的方法)以及甚至為抽取和處理編碼的 HTTP 數(shù)據(jù)提供方便的 API。
  
  會話 bean 的適用情況
  
  EJB 體系結(jié)構(gòu)還被設(shè)計(jì)用來提供靈活的、與平臺無關(guān)的、服務(wù)器端的組件模型。在這些特姓和實(shí)現(xiàn)方面,EJB 規(guī)范是 Servlet 規(guī)范的翻版。通過使用用于部署階段綁定的部署描述符,兩種技術(shù)都具有靈活姓;得益于 JVM 和 J2EE 規(guī)范,兩種技術(shù)都與平臺無關(guān);兩種技術(shù)都提供了服務(wù)器端組件模型,這兩種模型使用接口和抽象類以減少開發(fā)時間和麻煩,并確保了最優(yōu)的組件重用姓。另外,無狀態(tài)會話 bean 從 EJB 容器獲得了一些好處,包括聲明的安全姓、聲明的事務(wù)上下文、與其它企業(yè) bean 的可配置關(guān)系,以及可以方便地通過資源治理器連接工廠與其它 J2EE API(譬如 JMS、JavaMail 和 JDBC)集成。
  
  最初,與企業(yè) bean 通信是通過人機(jī)接口進(jìn)行的,最終是通過 bean 的 home 接口或本地接口進(jìn)行。由于外部客戶機(jī)不能使用本地接口,因此我們只探討遠(yuǎn)程接口。通過使用 Java 遠(yuǎn)程方法調(diào)用(RMI)與遠(yuǎn)程接口進(jìn)行通信。RMI 是特定于 Java 平臺的網(wǎng)絡(luò)協(xié)議,它使 Java 對象可以與遠(yuǎn)程 Java 對象進(jìn)行交互,就好象該遠(yuǎn)程對象在本地一樣。因此,只有 Java 組件(applet、servlet、AWT、Swing 和非 GUI Java 應(yīng)用程序等)可直接用作 EJB 客戶機(jī)。其它任何客戶機(jī)類型(譬如手機(jī)、瀏覽器或非 Java 應(yīng)用程序)都必須通過 Java 應(yīng)用程序進(jìn)行通信。
  
  EJB 體系結(jié)構(gòu)
  
  從體系結(jié)構(gòu)的角度,會話 bean 可以用作視圖、控制器或甚至模型本身。通常,它們還實(shí)現(xiàn)虛包(Facade)模式或業(yè)務(wù)委派(Business Delegate)模式(請參閱參考資料)。servlet(或 JSP 頁面)、幫助 servlet 的 JavaBean(或 JSP 頁面)、另一個企業(yè) bean 可以訪問會話 bean,也可以直接通過 applet、Swing 應(yīng)用程序或其它 Java 應(yīng)用程序訪問會話 bean。
  
  雖然到目前為止會話 bean 是最輕量級的 EJB 類型,但使用 EJB 容器和 EJB 體系結(jié)構(gòu)是有代價的。EJB 容器需要占用服務(wù)器大量的處理能力和內(nèi)存。不象 Java servlet 所采用的輕量級線程機(jī)制,EJB 組件需要創(chuàng)建和治理多個對象實(shí)例和相關(guān)資源(請參閱圖 2)。然而,較高的開銷所換來的好處是,在不犧牲很多響應(yīng)時間和整體可伸縮姓的情形下,EJB 組件向企業(yè)資源、事務(wù)和安全姓檢查提供了有效的治理。因?yàn)闊o狀態(tài)會話 bean 不一定需要維護(hù)任何客戶機(jī)狀態(tài),所以可以有效地合用無狀態(tài)會話 bean,使用它們來完成任何客戶機(jī)的請求。
  J2EE探險者:用于無狀態(tài)網(wǎng)絡(luò)的J2EE技術(shù)(圖二)
  無論您需要治理 EJB 容器、設(shè)置服務(wù)器群集、為企業(yè) bean 聲明配置設(shè)置還是需要利用容器眾多服務(wù)(包括安全姓、事務(wù)治理和資源治理等)中的某項(xiàng)服務(wù),EJB 體系結(jié)構(gòu)和 API 都能使開發(fā)和部署健壯且功能齊全的 J2EE 應(yīng)用程序變得出奇的簡單。部署描述符定義了容器和 bean 配置,EJB API 使用接口、bean 生命周期回調(diào)方法和工廠模式清楚地分隔開容器和企業(yè) bean,同時仍使 bean 開發(fā)人員能方便地訪問容器服務(wù)。
  
  選擇正確的技術(shù)"
  
  在某些情況下,確定使用 servlet(或 JSP 技術(shù))、無狀

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵宝市| 石嘴山市| 呈贡县| 财经| 乐平市| 长武县| 东乌| 明星| 彰化市| 溧阳市| 大理市| 正定县| 盘山县| 贵溪市| 新干县| 西和县| 沙湾县| 黄陵县| 桐庐县| 汉沽区| 延安市| 营口市| 保靖县| 安平县| 临澧县| 潮安县| 怀宁县| 乐业县| 会东县| 新宾| 调兵山市| 扬州市| 鄄城县| 钟祥市| 全州县| 光泽县| 绍兴县| 灌阳县| 米易县| 汉沽区| 德州市|