gdufo

           

          SiteMesh的使用

          轉:
          http://blog.chinaunix.net/u2/67919/showart_677228.html

          SiteMesh是一個用來在JSP中實現頁面布局和裝飾(layout and decoration)的框架組件,能夠幫助網站開發人員較容易實現頁面中動態內容和靜態裝飾外觀的分離。提供了一種在網站中更有效的組織頁面布局的方式。

               SiteMesh設計思想是,用戶發送request至服務器,服務器根據此request生成動態數據,生成網頁,準備返回給客戶端。就在返回前,SiteMesh進行攔截,對此網頁進行解析,將title、body等部分拆解出來,套上模板后,再返回給客戶端。由于SiteMesh在返回客戶端的最后一步工作,此時的網頁已經具備了標準的html網頁格式,因此SiteMesh只需解析標準的html網頁,無需考慮各個Web應用是應用了JSP、ASP,還是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我們可以很容易實現頁面中動態內容和靜態裝飾外觀的分離。


          具體可參考APPFUSE中的使用

          posted on 2008-08-25 20:51 gdufo 閱讀(1215) 評論(0)  編輯  收藏 所屬分類: Appfuse

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 西林县| 六枝特区| 文水县| 宜黄县| 曲阳县| 新平| 夏津县| 乌拉特中旗| 霞浦县| 新干县| 湖南省| 横山县| 西宁市| 泽库县| 蒙山县| 西峡县| 雅安市| 贵阳市| 醴陵市| 定兴县| 德令哈市| 枝江市| 潜山县| 屯门区| 仪陇县| 七台河市| 波密县| 宿迁市| 扶绥县| 白水县| 左云县| 濮阳市| 山丹县| 西盟| 江都市| 定南县| 汶上县| 江津市| 得荣县| 澄江县| 班戈县|