1. 程式人生 > >com.opensymphony.module.sitemesh.filter.pagefilter作用?

com.opensymphony.module.sitemesh.filter.pagefilter作用?

1.sitemesh簡介

2.與strust tiles比較

3.基本原理

4.簡單例子

5.總結

6.參考資料

1.sitemesh簡介

     sitemesh是由一個基於web頁面佈局、裝飾以及與現存web應用整合的框架。它能幫助我們在由大量頁面構成的專案中建立一致的頁面佈局和外 觀,如一致的導航條,一致的banner,一致的版權,等等。它不僅僅能處理動態的內容,如jsp,php,asp等產生的內容,它也能處理靜態的內容, 如htm的內容,使得它的內容也符合你的頁面結構的要求。甚至於它能將html檔案象include那樣將該檔案作為一個面板的形式嵌入到別的檔案中去。 所有的這些,都是gof的decorator模式的最生動的實現。儘管它是由java語言來實現的,但它能與其他web應用很好地整合。

2.與strust tiles比較

     從使用角度來看,tiles似乎是sitemesh標籤<page:applydecorator>的一個翻版。其實sitemesh 最強的一個特性是sitemesh將decorator模式用在過濾器上。任何需要被裝飾的頁面都不知道它要被誰裝飾,所以它就可以用來裝璜來自php、 asp、cgi等產生的頁面了。你可以定義若干個裝飾器,根據引數動態地選擇裝飾器,產生動態的外觀以滿足你的需求。它也有一套功能強大的屬性體系,它能 幫助你構建功能強大而靈活的裝飾器。相比較而言,在這方面tiles就遜色許多。

3.基本原理

    一個請求到伺服器後,如果該請求需要sitemesh裝飾,伺服器先解釋被請求的資源,然後根據配置檔案獲得用於該請求的裝飾器,最後用裝飾器裝飾被請求資源,將結果一同返回給客戶端瀏覽器。

下邊是由jsp和cgi產生的兩個頁面,它們通過sitemesh裝飾後,形成了一致的使用者介面。

4.簡單例子

   環境說明:

   windows2k+、tomcat4.0+

1.安裝:

    將sitemesh-2.1.jar複製到lib目錄下;修改web.xml檔案,也就是在web.xml中加入粗傾體標記的部分;

<?xml version="1.0" encoding="gb2312"?>

<! doctype web-app public "-//sun microsystems, inc.//dtd web application  2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<filter>

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

         <filter-lass>com.opensymphony.module.sitemesh.filter.pagefilter</filter-class></filter>

<filter-mapping>

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

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

</filter-mapping>



</web-app>

2.建立一個目錄,名字叫decorators,當然你也可以取別的,用於放裝飾器(也就是一個使用了sitemesh標籤的jsp檔案)用;

3.定義一個你的模板並把它放到decorators目錄下,我的文體名稱叫:mymain.jsp檔案內容如下:

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

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


<html>

<head>

<meta http-equiv="content-language" content="zh-cn">

<meta http-equiv="content-type" content="text/html;  charset=gb2312">

<meta name="generator" content="microsoft frontpage 4.0">

<meta name="progid" content="frontpage.editor.document">

<title>ap - <decorator:title default="welcome to  architecture pub!" />


</title>

<decorator:head />

</head>

< body><table border="0" cellpadding="2" width="100%" height= "151">  <tr>    <td width="20%" height="74">      <p  align="center"><font color="#000080" size="5">test sitemesh< /font></td>    <td width="73%" height="74"></td>   </tr>  <tr><td width="20%" height="28" bgcolor="#f3f3f3"  valign="top" >

<page:applydecorator page="/menu.jsp" name="panel" />

</td>    <td width="73%" height="28" bgcolor="#bed6fa">

<decorator:body />

< /td>  </tr>  <tr>    <td width="100%" height="31"  colspan="2" bgcolor="#f1f0ed">      <p align="center">powered  by gagaghost</td>  </tr></table></body>< /html>

說明:

<decorator:title default="welcome to test sitemesh!" />:讀取被裝飾頁面的標題,並給出了預設標題。

<decorator:head />:讀取被裝飾頁面的<head>中的內容;

<page:applydecorator page="/menu.jsp" name="panel" />:把menu.jsp檔案用 panel指定的裝飾器裝飾,並把結果插入到該位置;

<decorator:body />:讀取被裝飾頁面的<body>中的內容;

當然還有很多的標籤,這裡不再詳細描述。

4.在docorators.xml檔案裡配置剛寫好的模板mymain.jsp,內容如下:

<?xml version="1.0" encoding="iso-8859-1"?>

<decorators defaultdir="/decorators">

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

        <pattern>/*</pattern>

</decorator>

    <decorator name="panel" page="panel.jsp"/>

    <decorator name="printable" page="printable.jsp"/>

</decorators>

這裡我是把對所有的請求都用mymail.jsp來裝飾。

5.好了,run一下你的“小板凳”!你會看到如下結果:

5.總結

     使用sitemesh給我們帶來的是不僅僅是頁面結構問題,它的出現讓我們有更多的時間去關注底層業務邏輯,而不是整個頁面的風格和結構。它讓我們 擺脫了大量用include方式複用頁面尷尬局面,它也提供了很大的靈活性以及給我們提供了整合異構web系統頁面的一種方案。我們期望它在未來的版本中 會有更多的特性出現。

6.參考資料

http://www.opensymphony.com/