摘要:首先這個(gè)Decorator解釋一下這個(gè)單詞:“裝飾器”,我覺得其實(shí)可以這樣理解,他就像我們用到的Frame,他把每個(gè)頁面共有的東西提煉了出來,也可能我們也會(huì)用各種各樣的include標(biāo)簽,將我們的常用頁面給包括進(jìn)來:比如說頁面的top,bottom這些每個(gè)頁面幾乎都有,而且都一樣,如果我們?cè)诿總€(gè)頁面都include,可以發(fā)現(xiàn)我們的程序有很多冗余,重復(fù)。相比之下裝飾器給我們提供了一個(gè)較好的選擇,他在你要顯示的頁面根本看不出任何include信息,可以說完全解耦。
一、SiteMesh介紹
SiteMesh是一個(gè)Java WEB項(xiàng)目的網(wǎng)頁布局和修飾框架。使用SiteMesh后就不再需要在每個(gè)頁面中都用<jsp:include>標(biāo)簽引入頁頭、頁尾、導(dǎo)航等其他公用頁面了。
可以將網(wǎng)頁的內(nèi)容和頁面結(jié)構(gòu)分離,達(dá)到頁面結(jié)構(gòu)共享的目的。
頁面裝飾效果耦合在目標(biāo)頁面中,無需使用include指令顯示包含裝飾效果,目標(biāo)頁面和裝飾頁面完全分離。
整個(gè)web應(yīng)用可以使用相同的裝飾頁面,風(fēng)格統(tǒng)一,整體效果更好
SiteMesh通過Filter攔截請(qǐng)求和響應(yīng),給原始頁面加入裝飾,再把裝飾后的結(jié)果返回給客戶端。
根據(jù)頁面URL匹配規(guī)則查找合適的裝飾模板頁
提取被訪問頁的內(nèi)容,放置到裝飾模板中的適當(dāng)位置。
二、業(yè)務(wù)場(chǎng)景使用
比如常見的就是crm系統(tǒng),左邊的樹形菜單就是一致的,變化的右邊主體部分(即被裝飾的頁面)。
三、SiteMesh工作原理
sitemesh應(yīng)用Decorator模式,用filter截取request和response,把頁面組件head,content,banner、bottom結(jié)合為一個(gè)完整的視圖。通常我們都是用include標(biāo)簽在每個(gè)jsp頁面中來不斷的包含各種header, stylesheet, scripts and footer。見下圖
當(dāng)用戶請(qǐng)求home.jsp,并且服務(wù)器處理完畢正準(zhǔn)備返回?cái)?shù)據(jù)之時(shí),它被SiteMesh Fi