一.概述
設計模式是對重復出現的問題的一種可以重用的解決方法,其本質其實是解偶.1.J2EE應用模型的分層 (1)服務器端業務邏輯
(2)服務器端表示層
(3)客戶端表示層
2.J2EE的設計模式 (1)表示層體系結構模式
(2)表示層高級體系結構模式
(3)表示層伸縮性模式
(4)業務層模式
(5)數據傳遞模式
(6)數據庫模式
二.詳解
1.表示層體系結構模式
1.1前端控制模式
通過創建統一而且集中的組建來執行公共的任務,在J2EE的功能是截取所有的請求,并根據選擇利用這個前端控制器將請求轉發到一個頁面控制器,頁面控制器解析用戶的請求,選擇具體的業務邏輯,并根據結果轉到頁面視圖
一個Servlet可以作為一個前端控制器,也可以作為一個頁面控制器,這個servlet調用請求所應該執行的業務邏輯,并根據業務邏輯的結果返回到具體的顯示頁面..
1.1.1.Struts框架前端模式的實現
Actionservlet是Struts框架的主要Servlet,所有請求都會通過它.在ActionServelt中,它會處理如下工作
1)ActionServelt調用RequestProcessor的Process方法處理公共任務
2)RequestProcessor得到請求對應的Action處理請求的具體工作
在RequestProcessor的process方法中最后會調用ProcessActionPerform方法,這就是一個命名模式的實現,將具體請求的工作分配到Action
1.2.1MVC模式
這個模式是Struts框架所遵循的模式,利用Model2構架來解偶,它在J2EE的工能為根據視圖層,控制層和模型層3層的不同功能實現各層任務.
(1) 視圖層提供顯示頁面的功能.
(2)控制器層則接收用戶輸入,并轉到模型層來處理結果
(3)模型層處理業務邏輯在選擇視圖層的顯示頁面來完成工作
常見如下
*Struts框架的實現
*JeanBean或者EJB模型層,JSP或者HTML作為視圖層,Servelt作為控制器
1.2.2裝飾模式
該模式或為客戶端提供一個透明的擴充某實例功能的方法.該方法的返回類型就是這個實例,在客戶端不斷調用這個方法的同時,該實例的內部表象已經隨著功能改變完全不同了.
J2EE設計模式中的"裝飾模式"
servelt本身就是支持裝飾器模式,它的表現是裝飾一個request請求,利用裝飾器類截獲所有發送給目標對象的請求,并執行需要的工作,完成工作之后再把請求轉發到下一個裝飾器,直到沒有了裝飾器,最后將請求發送到Servlet
Servlet利用過濾器來攔截請求和響應.在請求到達Servelt前,為這個請求做一些額外處理.過濾器可以被看成一個程序,每個過濾器之間都能互相傳遞.
過濾器Filter接口代碼:







一個過濾器
這個過濾器SetCharacterEncodingFilter被用在當request請求到達Servelt前,為request的參數信息的字符編碼進行設定
SetCharcterEncodingFilter.java(省略)
配置過濾器如下:








1.3.1表示層高級體系結構模式
1)復合視圖模式(合成模式):提供一個樹狀的對象結構,樹枝類與樹葉類都實現同一個接口,以便客戶端在調用任何對象時都只需要調用該樹狀結構的根接口就可以了
2) 復合視圖在服務器端表示層使用,利用的合成模式的思想將視圖的布局從視圖中抽離出來,形成由一系列通用組件組成的模板
把視圖("島航","頁眉","頁腳"和"主體")的集合,每個元素是一個結點,而每個元素也可以是一個容器,包含更多的子元素.
模板可以被看成是接口,視圖則可被看成樹枝結點和樹葉結點

1.3.2視圖助手模式
此模式避免視圖過于特殊化,功能是使一組視圖助手將模型數據轉換成一種中間數據模式.視圖或視圖助手能夠將中間數據模型轉換成一種合適表達給用戶的形式如"html""xml"
(1)標簽的工作方式
標簽庫用來幫助程序員通過簡單的代碼構造實現頁面邏輯.一個標簽應該繼承javax.servlet.jsp.tagext.tagsupport,并給出doStartTag和doEndTag兩個方法來實現
doStartTag方法:在標簽開始時由Jsp容器調用,通常在這個方法中實現業務邏輯
doEndTag方法:在標簽結束時由JSP容器調用,通常在這個方法控制輸出.
(2)標簽的實現
以下是Struts框架提供的ConditionalTagBas部分代碼
ConditionalTagBas
1
public int doStartTag() throws JspException{
2
//doStartTag()表示標簽開始
3
if(condition())
4
return(EVAL_BODY_INCLUDE);
5
//EVAL_BODY_INCLUDE告訴JSP容器標簽正文的內容,并把這些內容送入輸出流
6
else
7
return(SKIP_BODY);
8
//SKIP_BODY告訴JSP容器不要處理標簽正文的內容
9
}
10
public int doEndTag() throws JspException{
11
//doEndTag() 表示標簽結束
12
return(EVAL_PAGE);
13
//EVAL_PAGE標簽處理完畢
14
}

2

3

4

5

6

7

8

9

10

11

12

13

14

1.3.3服務工作模式
服務工作者模式將頁面流轉,前端控制模式,視圖助手模式合在一起使用,表示"請求--轉發--視圖"的整套流程,服務器工作者模式也是MVC模式的實現標準,Struts框架本身基于這個模式實現
1.4 表示層伸縮性模式
1.4.1異步頁面模式
當遠程數據發生變化時,將其緩存下來這個模式又被稱為"發布者--訂閱者--模型".功能是利用一個訂閱者角色在一定的時間間隔或數據發生變化時接收來自發布者角色的數據,訂閱者角色同時會利用模型層來更新數據庫,常見的應用為,當發布服務器要顯示最新信息的Html頁面時,會利用一個訂閱者角色我負責.
1.4.2
該模式可以緩存動態的頁面,盡可能減少重復生成的頁面,功能是利用一個緩存過濾器截獲請求.判斷該請求所返回的頁面是否有緩存,如果它在緩存中,則以緩存的頁面最高效地進行響應;如果沒有可緩存數據,則執行隨后的工作,緩存生成頁面的結果,緩存過濾器應該被擺放在"裝飾過濾器"和工作Servlet之前,該模式其實是裝飾器模式的一種變體,常見為對HTTPServletResponse對象進行裝飾來保存請求處理結果
1.4.3
資源池模式 JDBC連接池
客戶