J2EE分層設(shè)計(jì)概念 |
J2EE五層邏輯模型和常見(jiàn)Framework ———————————————— | 客戶端層 | 用戶交互,UI實(shí)現(xiàn) | Browser,WirelessDevice,WebService | Http, Soap 協(xié)議(SOP體系) ———————————————— ———————————————— | 表現(xiàn)層 | 集中登錄,會(huì)話管理 | Struts,Jsf,Webwork,Tapstry, Velocity | 內(nèi)容創(chuàng)建,格式,傳送 ———————————————— ———————————————— | 業(yè)務(wù)服務(wù)層 | 業(yè)務(wù)邏輯,事務(wù),數(shù)據(jù),服務(wù) | SessionEJB,Spring,Jdoframework) | SessionEjb,POJO Service ———————————————— ———————————————— | 集中層 | 資源適配器,遺留/外部系統(tǒng) |Jms,Jdbc,Connnector,External Service | 規(guī)則引擎,工作流 ———————————————— (持久化EntityBean,Hibernate,iBatis,Jdo,Dao,TopLink etc.) ———————————————— | 資源層 | 資源,數(shù)據(jù)庫(kù),外部服務(wù) | DataBase,Resource,External Service | (大型主機(jī),B2B集中系統(tǒng)) ———————————————— 當(dāng)然一個(gè)常見(jiàn)典型的J2EE系統(tǒng)可能是這樣的 客戶端 —— 表現(xiàn)層 —— 業(yè)務(wù)層 —— 持久層 —— 數(shù)據(jù)庫(kù) FireFox + Velocity + Struts + Spring + Hibernate + MySql + Tomcat + Eclipse 我比較習(xí)慣用開(kāi)源產(chǎn)品。強(qiáng)烈支持開(kāi)源!! *.* 作為一個(gè)程序員,常常打交道的是中間層(表現(xiàn)層,業(yè)務(wù)層,集成層)。 每個(gè)層常用的技術(shù)簡(jiǎn)單的介紹如下: 表現(xiàn)層(Present Tier) Intercepting Filter —— 用于對(duì)請(qǐng)求的預(yù)處理和后處理 攔截過(guò)濾器攔截輸入的請(qǐng)求和輸出的響應(yīng),并加入了一個(gè)過(guò)濾器。Filter可以通過(guò)配置加入和取消(象在web.xml中加入ServletFilter),這樣多個(gè)過(guò)濾器還可以不沖突地組合使用。當(dāng)預(yù)處理以及/或者(filter雖然后response參數(shù),但有時(shí)候filter不做處理)后處理完成后,這組過(guò)濾器種的最后一個(gè)把控制器交給原來(lái)的目標(biāo)對(duì)象。對(duì)于request來(lái)說(shuō),這個(gè)目標(biāo)對(duì)象通常是前端控制器,但也可能是一個(gè)視圖。在Struts中,Action的執(zhí)行方法中參數(shù)由request, response, actionMapping,actionForm等等組成。而在Webwork中,Action不用去依賴于任何Web容器,不用和那些JavaServlet復(fù)雜的請(qǐng)求(Request)、響應(yīng)(Response)關(guān)聯(lián)在一起。對(duì)請(qǐng)求(Request)的參數(shù)(Param),可以使用攔截器框架自動(dòng)調(diào)用一些get()和set()方法設(shè)置到對(duì)應(yīng)的Action的字段中。所以Action的excute()方法沒(méi)有任何參數(shù),也不存在FormBean。正是這種攔截器,使得Action變得非常簡(jiǎn)單,Action不用繼承servlet,不依賴servlet容器,實(shí)現(xiàn)了請(qǐng)求響應(yīng)與Action之間的解耦,而且可以很方便的在action中不依賴web容器進(jìn)行單元測(cè)試。 Front Controller —— 集中控制請(qǐng)求處理 前端控制器是一個(gè)容器,用來(lái)裝載表現(xiàn)層的共同處理邏輯(如果不采用這個(gè)控制器,邏輯代碼就會(huì)錯(cuò)誤的放在視圖里)??刂破髫?fù)責(zé)處理請(qǐng)求,進(jìn)行內(nèi)容的獲取,安全性,視圖管理,導(dǎo)航等操作,并委派一個(gè)分配器組件分派視圖。 Application Controller —— 實(shí)現(xiàn)操作和視圖管理的集中化,模塊化 應(yīng)用控制器集中了控制,數(shù)據(jù)獲取,視圖和命令處理的調(diào)用。前端控制器為輸入的請(qǐng)求提供了一個(gè)集中的訪問(wèn)點(diǎn)和控制器,而應(yīng)用控制器則負(fù)責(zé)找出并調(diào)用命令,并且還要找出并分派視圖。比如Struts中的ActionServlet,Webwork種的ServletDispatcher等。 Context Object —— 以獨(dú)立于具體通訊協(xié)議的形式封裝狀態(tài) Context對(duì)象以獨(dú)立于具體通訊協(xié)議的形式封裝了狀態(tài),是狀態(tài)能夠在整個(gè)應(yīng)用系統(tǒng)中共享。使用Context對(duì)象能夠簡(jiǎn)化測(cè)試過(guò)程,提供一個(gè)更為通用的測(cè)試環(huán)境,減少了對(duì)特定容器的依賴。在webwork中,有兩種不同的Context對(duì)象,一種是 |
聯(lián)系客服