SiteMesh學習筆記

SiteMesh是一個輕量級的web應用框架,實現了Decorator模式。它的目標是將多個頁面都將引用的jsp頁面經過配置加載到相應的jsp文件中。web

 

在咱們的項目中,每一個jsp都須要添加兩個top和bottom的jsp來完成某些功能。最笨的方法固然就是在每一個頁面上hard code這些功能的相關代碼,可是這樣的作法實在是不知足DRY的原則。clean code須要咱們最大程度的複用咱們的代碼,減小代碼冗餘。服務器

 

SiteMesh提供了這樣的解決方案:使用decorator模式來動態的給每一個jsp頁面添加額外的職責。使用了Decorator模式後每一個頁面就能夠專一於解決本頁面要解決的問題,而不須要關心那些全局上須要每一個頁面完成的功能模塊了。app

 

SiteMesh的工做原理十分簡單:使用一個filter對每一個發送到服務器的請求進行過濾;對照配置文件確認該請求的目標jsp是否知足decorator的條件(是否須要被decorate);對須要decorate的頁面,使用配置文件中指定的裝飾規則把指定的文件(如header,footer等)與目標頁面組合起來,把結果返回給客戶端。框架

 

詳細的作法是:jsp

1.引入SiteMesh的引用this

<dependency>

     <groupId>opensymphony</groupId>

     <artifactId>sitemesh</artifactId>

     <version>2.4.2</version>

</dependency>

          

2.在web.xml文件中配置filterurl

<filter>

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

    <filter-class>com.opensymphony.sitemesh.webspp.SiteMeshFilter</filter-class>

</filter>

<filter-mapping>

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

    <url-pattern>*.jsp</url-pattern>

    <dispatcher>FORWARD</dispatcher>

</filter-mapping>

這樣的配置表明我但願對全部的jsp都進行decoratespa

 

3.編寫decorators.xmlcode

<decorators defaultdir="/path/to/decorators/file">

    <excludes>

         <pattern>/exclude/specific/kind/of/files/in/this/folder</pattern>

    </excludes>

    <decorator name="myDecorator" page="FileNameOfTheDecorateRule">

         <pattern>*.jsp</pattern>

    </decorator>

</decorators>

excludes節點定義了哪些在decorator目錄下,可是我又不想其被裝飾的文件。xml

 

4.編寫定義decorate rules的jsp模板

這裏的decorate rules就是在decorators.xml文件中定義的「myDecorator」,其中詳細定義了對目標文件的裝飾規則。包括:用什麼文件對目標文件進行裝飾,在目標文件的哪一個位置進行裝飾等等。它通常是一個jsp文件,或者說是一個模板。在這個模板中寫入須要decorate的詳細內容,格式規範與普通jsp相同,可是有兩個重要的標籤:

<decorator:head/>

<decorator:body/>

當對目標頁面進行裝飾的時候,遇到<decorator:head/>就插入目標文件的<head>部分,遇到<decorator:body/>就插入目標文件的<body>部分。

這樣,根據目標文件的不一樣,就動態的生成了具備相同附加職責的不一樣的頁面。

相關文章
相關標籤/搜索