一、SiteMesh設(shè)計思想
用戶發(fā)送request至服務(wù)器,服務(wù)器根據(jù)此request生成動態(tài)數(shù)據(jù),生成網(wǎng)頁,準(zhǔn)備返回給客戶端。就在返回前,SiteMesh進(jìn)行攔截,對此網(wǎng)頁進(jìn)行解析,將title、body等部分拆解出來,套上模板后,再返回給客戶端。由于SiteMesh在返回客戶端的最后一步工作,此時的網(wǎng)頁已經(jīng)具備了標(biāo)準(zhǔn)的html網(wǎng)頁格式,因此SiteMesh只需解析標(biāo)準(zhǔn)的html網(wǎng)頁,無需考慮各個Web應(yīng)用是應(yīng)用了JSP、ASP,還是Velocity技術(shù),相當(dāng)靈活。 SiteMesh官方地址:http://www.opensymphony.com/sitemesh/index.html SiteMesh官方下載:http://www.opensymphony.com/sitemesh/download.html SiteMesh 2.3下載:http://www.javauu.com/downloads/resource/sitemesh-2.3.zip
二、SiteMesh簡單部署到實(shí)現(xiàn)
配置: 除了要copy到WEB-INF/lib中的sitemesh.jar外,還有2個文件要建立到WEB-INF/: sitemesh.xml (可選) decorators.xml sitemesh.xml 可以設(shè)置2種信息: 1.Page Parsers :負(fù)責(zé)讀取stream的數(shù)據(jù)到一個Page對象中以被SiteMesh解析和操作。(不太常用,默認(rèn)即可) 2.Decorator Mappers : 不同的裝飾器種類,我發(fā)現(xiàn)2種比較有用都列在下面。一種通用的mapper,可以指定裝飾器的配置文件名,另一種可打印的裝飾器,可以允許你當(dāng)用http://localhost/aaa/a.html?printable=true方式訪問時給出原始頁面以供打印(免得把header,footer等的花哨的圖片也搭上)
(但一般不用建立它,默認(rèn)設(shè)置足夠了:com/opensymphony/module/sitemesh/factory/sitemesh-default.xml), 范例如下:
實(shí)現(xiàn): 這里定義了一個過濾器.所有的請求都交由sitemesh來處理,在web.xml中加入如下片段:
建立WEB-INF/decorators.xml描述各裝飾器頁面。
各標(biāo)簽常見屬性的含義為: defaultdir: 包含裝飾器頁面的目錄 page : 頁面文件名 name : 別名 role : 角色,用于安全 webapp : 可以另外指定此文件存放目錄 Patterns : 匹配的路徑,可以用*,那些被訪問的頁面需要被裝飾
在web下面建一個文件夾取名decorators.在decoratots下面創(chuàng)建上面定義的模板頁面main.jsp,內(nèi)容如下:
說明:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
此處為decorator標(biāo)簽的聲明。因?yàn)槲覀兿旅嬉褂玫剿?/p>
<decorator:title />
把請求的原始頁面的title內(nèi)容插入到<title></title>,比如我們要請求index.jsp頁面的時候。會把index.jsp中的title的內(nèi)容放入到這里
<decorator:body />
把請求的原始頁面的body內(nèi)容插入到<body></body>,發(fā)現(xiàn)沒有我們在這句的前面加上了<p>Add head decorator...</p>和<p>Add foot decorator...</p>
相當(dāng)于給我們請求的頁面的body內(nèi)容加上了頭部和尾部.實(shí)現(xiàn)了模板功能。
在WEB-INF下創(chuàng)建我們要請求訪問的頁面index.jsp,內(nèi)容如下:
把web工程部署到tomcat容器中。
輸入http://localhost:8080/SitemeshSample/index.jsp
頁面效果如下:
不難發(fā)現(xiàn),我們index.jsp中只有Welcome to the SiteMesh sample... 一句。但是在返回給我們之前套上了main.jsp模板頁。在它的前面和后面分別加上了一句話。通過Sitemesh我們可以很容易實(shí)現(xiàn)頁面中動態(tài)內(nèi)容和靜態(tài)裝飾外觀的分離。
Powered by: BlogJava Copyright © Gavin.lee