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