posts - 66, comments - 12, trackbacks - 0, articles - 0

          SiteMesh頁面布局組件 轉載

          Posted on 2010-05-18 15:05 cyantide 閱讀(286) 評論(0)  編輯  收藏 所屬分類: web
          SiteMesh是一個用來在JSP中實現頁面布局和裝飾(layout and decoration)的框架組件,能夠幫助網站開發人員較容易實現頁面中動態內容和靜態裝飾外觀的分離。提供了一種在網站中更有效的組織頁面布局的方式。

               SiteMesh設計思想是,用戶發送request至服務器,服務器根據此request生成動態數據,生成網頁,準備返回給客戶端。就在返回前,SiteMesh進行攔截,對此網頁進行解析,將titlebody等部分拆解出來,套上模板后,再返回給客戶端。由于SiteMesh在返回客戶端的最后一步工作,此時的網頁已經具備了標準的html網頁格式,因此SiteMesh只需解析標準的html網頁,無需考慮各個Web應用是應用了JSPASP,還是Velocity技術,相當靈活。

               SiteMesh使用了Decorator的設計模式。

           

          本文為大家展示一個簡單的SiteMesh例子。

               首先創建一個web工程.名字就叫做SitemeshSample.sitemesh-2.3.jar, commons-collections.jar放到lib目錄下。

          web.xml中加入如下片段:

              <filter>

                 <filter-name>sitemesh</filter-name>

                 <filter-class>

                     com.opensymphony.module.sitemesh.filter.PageFilter

                 </filter-class>

              </filter>

              <filter-mapping>

                 <filter-name>sitemesh</filter-name>

                 <url-pattern>/*</url-pattern>

              </filter-mapping>

              這里定義了一個過濾器.所有的請求都交由sitemesh來處理

           

               WEB-INF下創建一個decorators.xml文件,內容如下:

              <?xml version="1.0" encoding="UTF-8"?>

              <decorators defaultdir="/decorators">

                  <decorator name="main" page="main.jsp">

                     <pattern>/*</pattern>

                  </decorator>

              </decorators>

              這是定義了模板頁,也就是所有頁面在返回給客戶端之前,先在這里加上裝飾,套上模板。

          defaultdir="/decorators"說明了模板頁的路徑。<decorator name="main" page="main.jsp">模板頁的名稱。    <pattern>/*</pattern>表示對所有的response進行處理

           

              web下面建一個文件夾取名decorators.decoratots下面創建上面定義的模板頁面main.jsp,內容如下:

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

          <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

          <html>

              <head>

                 <title><decorator:title />

                 </title>

              <body>

                 <p>Add head decorator...</p>

                 <decorator:body />

                 <p>Add foot decorator...</p>

              </body>

          </html>

          說明:

          <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>

          此處為decorator標簽的聲明。因為我們下面要使用到它

          <decorator:title />

          把請求的原始頁面的title內容插入到<title></title>,比如我們要請求index.jsp頁面的時候。會把index.jsp中的title的內容放入到這里

          <decorator:body />

          把請求的原始頁面的body內容插入到<body></body>,發現沒有我們在這句的前面加上了<p>Add head decorator...</p><p>Add foot decorator...</p>

          相當于給我們請求的頁面的body內容加上了頭部和尾部.實現了模板功能。

           

          WEB-INF下創建我們要請求訪問的頁面index.jsp,內容如下:

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

          <html>

              <head>

                 <title>SiteMesh Sample Site</title>

              </head>

           

              <body>

                 Welcome to the SiteMesh sample...

              </body>

          </html>

          web工程部署到tomcat容器中。

          輸入http://localhost:8080/SitemeshSample/index.jsp

           

          頁面效果如下:

          Add head decorator...

          Welcome to the SiteMesh sample...

          Add foot decorator...

          不難發現,我們index.jsp中只有Welcome to the SiteMesh sample... 一句。但是在返回給我們之前套上了main.jsp模板頁。在它的前面和后面分別加上了一句話。通過Sitemesh我們可以很容易實現頁面中動態內容和靜態裝飾外觀的分離。

           

          主站蜘蛛池模板: 曲阳县| 台东县| 江孜县| 铜梁县| 永济市| 宜昌市| 韶关市| 襄汾县| 遵化市| 二连浩特市| 阜阳市| 连城县| 尉犁县| 常宁市| 望奎县| 永清县| 开阳县| 巢湖市| 翼城县| 易门县| 赣州市| 马关县| 依安县| 肇庆市| 共和县| 全南县| 怀集县| 镇安县| 姜堰市| 寻乌县| 贵州省| 梅河口市| 曲阜市| 沾益县| 潼南县| 长垣县| 临颍县| 鱼台县| 东山县| 育儿| 吴堡县|