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







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








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

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

2

3

4

5

6

7

8

9

10

11

12

13

14

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