天天看點

sitemesh 2.4

SiteMesh 是一個網頁布局和修飾的架構,利用它可以将網頁的内容和頁面結構分離,以達到頁面結構共享的目的。

它通過對所有的使用者請求進行過濾,并對伺服器向用戶端響應也進行過濾,進而給原始的伺服器響應加入一定的裝飾,可以是header、footer等,然後将經過裝飾後的頁面送回浏覽者。對于被裝飾的頁面而言,它無需知道自身被誰裝飾,也無從知道自身被誰裝飾。

SiteMesh通過配置檔案來配置指定的裝飾器,用于過濾某些頁面,則該裝飾器會裝飾這些頁面,進而提供更好的頁面效果,通過SiteMesh的頁面裝飾,可以提供更好的代碼複用,所有的頁面裝飾效果耦合在目标頁面中,無需使用include指令來顯式包含裝飾效果,目标頁面與裝飾頁面完全分開。提供更好的解耦,而且可以在應用中所有的頁面都使用相同的裝飾頁面,整個Web應用會有更統一的風格,會提供更好的整體效果。

SiteMesh通過Filter來截取request和response,然後給原始的頁面加入一定的裝飾,再把結果傳回給用戶端。

使用SiteMesh的步驟:

1、maven引入:

<dependency>
	<groupId>opensymphony</groupId>
	<artifactId>sitemesh</artifactId>
	<version>2.4.2</version>
</dependency>
           

2、在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>
           

3、在WEB-INF中建立decorators.xml檔案:

<?xml version="1.0" encoding="UTF-8"?>  
<decorators defaultdir="/layouts/">  
 <!-- 不需要過濾的請求 -->  
 <excludes>  
  <pattern>/static/*</pattern>  
  <pattern>/remote/*</pattern>  
 </excludes>  
 <!-- 定義裝飾器要過濾的頁面 -->  
 <decorator name="default" page="default.jsp">  
  <pattern>/*</pattern>  
 </decorator>  
</decorators>  
           

1、在decorator标簽的page屬性是指向的jsp裝飾頁面,下面攔截的/*是真正的普通頁面,要被page指定的頁面所修飾,修飾頁面就是寫了一堆SiteMesh的标簽,然後将pattern标簽上url攔截到的被裝飾頁面的對應裝飾頁面标簽的head和body提取過來填充到裝飾頁面中。

2、excludes标簽下配置的是不需要攔截忽略的url。

3、可以不需要使用<pattern>進行攔截被裝飾頁面,可使用meta進行攔截<meta name="xxx" content="xxx" />

引入了SiteMesh标簽:

<sitemesh:title /> 會自動替換為被過濾頁面的title。

<sitemesh:head /> 會把被過濾頁面head裡面的東西(除了title)放到這裡。

<sitemesh:body /> 被過濾的頁面的body内容會放到這裡。

繼續閱讀