Hey,buddy:What's up?

          Happy&Optimistic&Effective

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            14 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks

          轉(zhuǎn)載說明:本文主要講述內(nèi)容:J2EE web架構(gòu)基線,模型選取以及幾個模型的優(yōu)缺點對比。
          一、
          J2EE體系包括java server pages(JSP) ,java SERVLET, enterprise bean,WEB service等技術(shù)。怎樣把這些技術(shù)組合起來形成一個適應(yīng)項目需要的穩(wěn)定架構(gòu)是項目開發(fā)過程中一個非常重要的步驟。完成這個步驟可以形成一個主要里程碑基線。
          1.各種因數(shù)初步確定
          為了形成架構(gòu)基線,架構(gòu)設(shè)計師要對平臺(體系)中的技術(shù)進行篩選,各種利弊的權(quán)衡。往往架構(gòu)設(shè)計師在這個過程中要閱讀大量的技術(shù)資料,聽取項目組成員的建議,考慮領(lǐng)域?qū)<业男枨?,考慮贊助商成本(包括開發(fā)成本和運行維護成本)限額。一旦架構(gòu)設(shè)計經(jīng)過評審,這些因數(shù)初步地就有了在整個項目過程中的對項目起多大作用的定位。
          2.定向技術(shù)培訓
          一旦架構(gòu)師設(shè)計的架構(gòu)得到了批準形成了基線,項目開發(fā)和運行所采用的技術(shù)基本確定下來了。眾多的項目經(jīng)理都會對預(yù)備項目組成員的技術(shù)功底感到擔心;他們需要培訓部門提供培訓,但就架構(gòu)師面對的技術(shù)海洋,項目經(jīng)理根本就提不出明確的技術(shù)培訓需求。怎不能夠?qū)w系中所有技術(shù)都進行培訓吧!有了架構(gòu)里程碑基線,項目經(jīng)理能確定這個項目開發(fā)會采用什么技術(shù),這是提出培訓需求應(yīng)該是最精確的。不過在實際項目開發(fā)中,技術(shù)培訓可以在基線確定之前與架構(gòu)設(shè)計并發(fā)進行。
          3.角色分工
          有了一個好的架構(gòu)藍圖,我們就能準確劃分工作。如網(wǎng)頁設(shè)計,JSP 標簽處理類設(shè)計,SERVLET 設(shè)計,session bean設(shè)計,還有各種實現(xiàn)。這些任務(wù)在架構(gòu)藍圖上都可以清晰地標出位置,使得項目組成員能很好地定位自己的任務(wù)。一個好的架構(gòu)藍圖同時也能規(guī)范化任務(wù),能很好地把任務(wù)劃分為幾類,在同一類中的任務(wù)的工作量和性質(zhì)相同或相似。這樣工作量估計起來有一個非常好的基礎(chǔ)。
          4.運行維護
          前面說過各個任務(wù)在架構(gòu)圖上都有比較好的定位。任何人能借助它很快地熟悉整個項目的運行情況,錯誤出現(xiàn)時能比較快速地定位錯誤點。另外,有了清晰的架構(gòu)圖,項目版本管理也有很好的版本樹軀干。
          5.擴展性
          架構(gòu)猶如一顆參天大樹的軀干,只要軀干根系牢,樹干粗,長一些旁支,加一些樹葉輕而易舉無疑。同樣,有一個穩(wěn)定的經(jīng)得起考驗的架構(gòu),增加一兩個業(yè)務(wù)組件是非??焖俸腿菀椎摹?/SPAN>

          1.1. 模型1

          模型1其實不是一個什么穩(wěn)定架構(gòu),甚至談不上形成了架構(gòu)。模型1的基礎(chǔ)是JSP文件。它從HTTP的請求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,處理HTTP會話,最后生成HTTP文檔。一系列這樣的JSP文件形成一個完整的模型1應(yīng)用,當然可能會有其他輔助類或文件。早期的ASP PHP 技術(shù)就屬于這個情況。
          總的看來,這個模型的好處是簡單,但是它把業(yè)務(wù)邏輯和表現(xiàn)混在一塊,對大應(yīng)用來說,這個缺點是令人容忍不了的。
          1.2. 模型2

          在經(jīng)過一番實踐,并廣泛借鑒和總結(jié)經(jīng)驗教訓之后,J2EE應(yīng)用程序終于迎來了MVC(模型-視圖-控制)模式。MVC模式并不是J2EE行業(yè)人士標新立異的,所以前面我談到廣發(fā)借鑒。MVC的核心就是做到三層甚至多層的松散耦合。這對基于組件的,所覆蓋的技術(shù)不斷膨脹的J2EE體系來說真是福音和救星。

          它在瀏覽器(本文對客戶代理都稱瀏覽器)和JSPSERVLET之間插入一個控制組件。這個控制組件集中了處理瀏覽器發(fā)過來的HTTP請求的分發(fā)邏輯,也就是說,它會根據(jù)HTTP請求的URL,輸入?yún)?shù),和目前應(yīng)用的內(nèi)部狀態(tài),把請求分發(fā)給相應(yīng)的WEB 層的JSP SERVLET。另外它也負責選擇下一個視圖(在J2EE中,JSP,SERVLET會生成回給瀏覽器的html從而形成視圖)。集中的控制組件也有利于安全驗證,日志紀錄
          1.3. 多層應(yīng)用
          Client tier客戶層
          一般為瀏覽器或其他應(yīng)用。客戶層普遍地支持HTTP協(xié)議,也稱客戶代理。
          WEB tier WEB
          應(yīng)用層
          J2EE中,這一層由WEB 容器運行,它包括JSP, SERVLETWEB部件。
          EJB tier
          企業(yè)組件層
          企業(yè)組件層由EJB容器運行,支持EJB, JMS, JTA 等服務(wù)和技術(shù)。
          EIS tier
          企業(yè)信息系統(tǒng)層
          企業(yè)信息系統(tǒng)包含企業(yè)內(nèi)傳統(tǒng)信息系統(tǒng)如財務(wù),CRM等,特點是有數(shù)據(jù)庫系統(tǒng)的支持。

          應(yīng)用框架目前主要集中在
          WEB層,旨在規(guī)范這一層軟件的開發(fā)。其實企業(yè)組件層也可以實現(xiàn)這個模型,但目前主要以設(shè)計模式的形式存在。而且有些框架可以擴充,有了企業(yè)組件層組件的參與,框架會顯得更緊湊,更自然,效率會更高。

          二、候選方案

          2.1. Apache Struts

          Struts
          是一個免費的開源的WEB層的應(yīng)用框架,apache軟件基金致力于struts的開發(fā)。Struts具是高可配置的性,和有一個不斷增長的特性列表。一個前端控制組件,一系列動作類,動作映射,處理XML的實用工具類,服務(wù)器端java bean 的自動填充,支持驗證的WEB 表單,國際化支持,生成HTML,實現(xiàn)表現(xiàn)邏輯和模版組成了struts的靈魂。

          2.1.1.1. 控制

          如圖所示,它的主要部件是一個通用的控制組件。這個控制組件提供了處理所有發(fā)送到Struts HTTP請求的入口點。它截取和分發(fā)這些請求到相應(yīng)的動作類(這些動作類都是Action類的子類)。另外控制組件也負責用相應(yīng)的請求參數(shù)填充 From bean,并傳給動作類。動作類實現(xiàn)核心商業(yè)邏輯,它可以通過訪問java bean 或調(diào)用EJB。最后動作類把控制權(quán)傳給后續(xù)的JSP 文件,后者生成視圖。所有這些控制邏輯利用一個叫struts-config.xml文件來配置。

          2.1.1.2.
          模型

          模型以一個或幾個java bean的形式存在。這些bean分為三種:

          Form beans(
          表單Beans)
          它保存了HTTP post請求傳來的數(shù)據(jù),在Struts里,所有的Form beans都是 ActionFrom 類的子類。
          業(yè)務(wù)邏輯beans
          專門用來處理業(yè)務(wù)邏輯。
          系統(tǒng)狀態(tài)beans
          它保存了跨越多個HTTP 請求的單個客戶的會話信息,還有系統(tǒng)狀態(tài)。
          2.1.1.3.
          視圖

          控制組件續(xù)傳HTTP請求給實現(xiàn)了視圖的JSP文件。JSP能訪問beans 并生成結(jié)果文檔反饋到客戶。Struts提供JSP 標簽庫: Html,BeanLogic,Template等來達到這個目的,并有利于分開表現(xiàn)邏輯和程序邏輯。
          2.1.2. Struts的細節(jié)分析

          2.1.2.1.
          視圖-控制-模型

          用戶發(fā)出一個*.doHTTP請求,控制組件接收到這個請求后,查找針對這個請求的動作映射,再檢查是否曾創(chuàng)建過相應(yīng)的動作對象(action實例),如果沒有則調(diào)用actionmapping生成一個動作對象,控制組件會保存這個動作對象供以后使用。接著調(diào)用actionmapping的方法得到actionForm對象。之后把actionForm作為參數(shù)傳給動作對象的perform方法,這個方法結(jié)束之后會返回給控制組件一個 actionforward對象。控制組件接著從這個對象中獲取下一個視圖的路徑和重定向?qū)傩?。如果為重定向則調(diào)用HTTPSERVLETREPONSE的方法來顯示下一個視圖,否則相繼調(diào)用requestdispatcher, SERVLETcontext的方法續(xù)傳HTTP請求到下一個視圖。

          當動作對象運行perform方法時,可能出現(xiàn)錯誤信息。動作對象可以保存這些錯誤信息到一個error對象中,接著調(diào)用自身的saveerrors方法把這個錯誤保存到request對象的屬性中。接著動作對象調(diào)用actionmapping對象的getInput方法從動作映射中獲取input參數(shù),也就是產(chǎn)生輸入的視圖,并以這個input為參數(shù)生成一個actionforward對象返回。這個input參數(shù)的JSP中一般有HTTP:errors定制標簽讀取這些錯誤信息并顯示在頁面上。

          2.1.2.2. 模型到視圖

          模型到視圖指視圖在顯示之前裝載系統(tǒng)數(shù)據(jù)到視圖的過程。系統(tǒng)數(shù)據(jù)一般為模型內(nèi)java bean的信息。示意圖表現(xiàn)了由控制組件forward過來的有html:form定制標簽的JSP 的處理邏輯。

          html:form
          定制標簽處理對象從application scope(通過查詢SERVLETCONTEXT對象的屬性來實現(xiàn))獲取先前由控制組件actionSERVLET放在那里的動作映射等對象,由html:form action屬性查得actionform名字、類型和范圍等信息,在相應(yīng)的范圍內(nèi)查找actionform,如果有則利用它的信息填充html form表單[實際填充動作在嵌套的html:text等定制標簽的處理對象中]。否則在相應(yīng)范圍內(nèi)創(chuàng)建一個actionform 對象。

          posted on 2005-10-21 20:21 Kun Tao's Blog 閱讀(265) 評論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 耒阳市| 任丘市| 温泉县| 金乡县| 孙吴县| 三门峡市| 门头沟区| 安乡县| 会泽县| 乌苏市| 渭源县| 桦甸市| 上犹县| 黑山县| 通辽市| 冀州市| 五大连池市| 青铜峡市| 融水| 高雄市| 凤庆县| 加查县| 宁国市| 齐齐哈尔市| 顺平县| 涪陵区| 西乌珠穆沁旗| 舞钢市| 繁昌县| 古浪县| 当阳市| 泾阳县| 滦平县| 通许县| 凉山| 齐河县| 墨脱县| 吴堡县| 克拉玛依市| 九台市| 锡林郭勒盟|