SiteMesh學習筆記1(一個優于Apache Tiles的Web頁面布局、裝飾框架)
OS(OpenSymphony)的SiteMesh是一個用來在JSP中實現頁面布局和裝飾(layout and decoration)
的框架組件,能夠幫助網站開發人員較容易實現頁面中動態內容和靜態裝飾外觀的分離。
Sitemesh是由一個基于Web頁面布局、裝飾以及與現存Web應用整合的框架。它能幫助我們在由大
量頁面構成的項目中創建一致的頁面布局和外觀,如一致的導航條,一致的banner,一致的版權,等等。
它不僅僅能處理動態的內容,如jsp,php,asp等產生的內容,它也能處理靜態的內容,如htm的內容,
使得它的內容也符合你的頁面結構的要求。甚至于它能將HTML文件象include那樣將該文件作為一個面板
的形式嵌入到別的文件中去。所有的這些,都是GOF的Decorator模式的最生動的實現。盡管它是由java語言來實現的,但它能與其他Web應用很好地集成。
官方:http://www.opensymphony.com/sitemesh/
下載地址:http://www.opensymphony.com/sitemesh/download.action 目前的最新版本是Version 2.3;
本文介紹sitemesh的簡單應用:
首先下載 sitemesh.jar, 拷貝到你的WEB-INF/lib文件夾下,然后將一下代碼添加到你的web.xml下
在WEB-INF下建立decorators.xml文件,添加如下代碼:
decorator結點指定了模板的位置和文件名,通過pattern來指定哪些路徑引用哪個模板
excludes結點則指定了哪些路徑的請求不使用任何模板
上面代碼,凡是以/login/開頭的請求路徑一律不使用模板;
decorators結點的defaultdir屬性指定了模板文件存放的目錄;
在WEB-INF下建立decorators文件夾,在下面建立main.jsp,代碼如下:
也就是說凡是能進入過濾器的請求生成的頁面都會默認加上模板上的頭和腳,然后頁面自身的內容將自動放到<decorator:body />標簽所在位置;
<decorator:title default="默認title" />:讀取被裝飾頁面的標題,并給出了默認標題。
<decorator:head />:讀取被裝飾頁面的<head>中的內容;
<decorator:body />:讀取被裝飾頁面的<body>中的內容;
好了,下載可以建立頁面了,看看你的頁面是不是被sitemesh改變了呢?(建立index.jsp)瀏覽
的框架組件,能夠幫助網站開發人員較容易實現頁面中動態內容和靜態裝飾外觀的分離。
Sitemesh是由一個基于Web頁面布局、裝飾以及與現存Web應用整合的框架。它能幫助我們在由大
量頁面構成的項目中創建一致的頁面布局和外觀,如一致的導航條,一致的banner,一致的版權,等等。
它不僅僅能處理動態的內容,如jsp,php,asp等產生的內容,它也能處理靜態的內容,如htm的內容,
使得它的內容也符合你的頁面結構的要求。甚至于它能將HTML文件象include那樣將該文件作為一個面板
的形式嵌入到別的文件中去。所有的這些,都是GOF的Decorator模式的最生動的實現。盡管它是由java語言來實現的,但它能與其他Web應用很好地集成。
官方:http://www.opensymphony.com/sitemesh/
下載地址:http://www.opensymphony.com/sitemesh/download.action 目前的最新版本是Version 2.3;
本文介紹sitemesh的簡單應用:
首先下載 sitemesh.jar, 拷貝到你的WEB-INF/lib文件夾下,然后將一下代碼添加到你的web.xml下
<!-- sitemesh配置 -->
<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>
(注意過濾器的位置:應該在struts2的org.apache.struts2.dispatcher.FilterDispatcher過濾器之前
org.apache.struts2.dispatcher.ActionContextCleanUp過濾器之后,否則會有問題;)<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>
在WEB-INF下建立decorators.xml文件,添加如下代碼:
<?xml version="1.0" encoding="utf-8"?>
<decorators defaultdir="/WEB-INF/decorators">
<!-- 此處用來定義不需要過濾的頁面 -->
<excludes>
<pattern>/login/*</pattern>
</excludes>
<!-- 用來定義裝飾器要過濾的頁面 -->
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
decorators.xml有兩個主要的結點:<decorators defaultdir="/WEB-INF/decorators">
<!-- 此處用來定義不需要過濾的頁面 -->
<excludes>
<pattern>/login/*</pattern>
</excludes>
<!-- 用來定義裝飾器要過濾的頁面 -->
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
decorator結點指定了模板的位置和文件名,通過pattern來指定哪些路徑引用哪個模板
excludes結點則指定了哪些路徑的請求不使用任何模板
上面代碼,凡是以/login/開頭的請求路徑一律不使用模板;
decorators結點的defaultdir屬性指定了模板文件存放的目錄;
在WEB-INF下建立decorators文件夾,在下面建立main.jsp,代碼如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 01 Transitional//EN" "http://www.worg/TR/html4/loose.dtd">
<html>
<!-- 第一個裝飾頁面 -->
<head>
<!-- 從被裝飾頁面獲取title標簽內容,并設置默認值-->
<title><decorator:title default="默認title"/></title>
<!-- 從被裝飾頁面獲取head標簽內容 -->
<decorator:head/>
</head>
<body>
<h2>SiteMesh裝飾header</h2>
<hr />
<!-- 從被裝飾頁面獲取body標簽內容 -->
<decorator:body />
<hr />
<h2>SiteMesh裝飾footer</h2>
</body>
</html>
這就是個簡單的模板,頁面的頭和腳都由模板里的靜態HTML決定了,主頁面區域用的是<decorator:body />標簽;pageEncoding="utf-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 01 Transitional//EN" "http://www.worg/TR/html4/loose.dtd">
<html>
<!-- 第一個裝飾頁面 -->
<head>
<!-- 從被裝飾頁面獲取title標簽內容,并設置默認值-->
<title><decorator:title default="默認title"/></title>
<!-- 從被裝飾頁面獲取head標簽內容 -->
<decorator:head/>
</head>
<body>
<h2>SiteMesh裝飾header</h2>
<hr />
<!-- 從被裝飾頁面獲取body標簽內容 -->
<decorator:body />
<hr />
<h2>SiteMesh裝飾footer</h2>
</body>
</html>
也就是說凡是能進入過濾器的請求生成的頁面都會默認加上模板上的頭和腳,然后頁面自身的內容將自動放到<decorator:body />標簽所在位置;
<decorator:title default="默認title" />:讀取被裝飾頁面的標題,并給出了默認標題。
<decorator:head />:讀取被裝飾頁面的<head>中的內容;
<decorator:body />:讀取被裝飾頁面的<body>中的內容;
好了,下載可以建立頁面了,看看你的頁面是不是被sitemesh改變了呢?(建立index.jsp)瀏覽
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 01 Transitional//EN" "http://wwwworg/TR/html4/loosedtd">
<html>
<!-- 第一個被裝飾(目標)頁面 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>被裝飾(目標)頁面title</title>
</head>
<body>
<h4>被裝飾(目標)頁面body標簽內內容。</h4>
<h3>使用SiteMesh的好處?</h3>
<ul>
<li>
<li>很多很多</li>
</ul>
</body>
</html>
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 01 Transitional//EN" "http://wwwworg/TR/html4/loosedtd">
<html>
<!-- 第一個被裝飾(目標)頁面 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>被裝飾(目標)頁面title</title>
</head>
<body>
<h4>被裝飾(目標)頁面body標簽內內容。</h4>
<h3>使用SiteMesh的好處?</h3>
<ul>
<li>
<li>很多很多</li>
</ul>
</body>
</html>
posted on 2008-12-10 20:14 草原上的駱駝 閱讀(606) 評論(0) 編輯 收藏 所屬分類: JAVA框架