日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SiteMesh使用

 凌氏 2014-05-09

什么是SiteMesh?
    SiteMesh是OpenSymphony下的一個(gè)項(xiàng)目,是基于PageFilter,Servlet過濾器的通用組件.



SiteMesh為我們帶來什么?
    我們可以想像一下,當(dāng)我們的應(yīng)用程序有大量的頁(yè)面時(shí)候,為每個(gè)頁(yè)面include我們各種各樣的標(biāo)簽庫(kù),引入的js和css等樣式,這將會(huì)成為重復(fù)性的工作,而且只要其中一個(gè)標(biāo)簽庫(kù)進(jìn)行了更新升級(jí),所有頁(yè)面的標(biāo)簽聲明都需要重新更改,這項(xiàng)工作無疑是恐怖而且毫無技術(shù)含量的,SiteMesh就是為了幫助我們解決這個(gè)問題,把共有的標(biāo)簽例如js,css,struts-tags等重復(fù)性的聲明抽象到一個(gè)頁(yè)面當(dāng)中,從而實(shí)現(xiàn)集中處理,增加維護(hù)性和解除頁(yè)面間的耦合.



SiteMesh原理:
    SiteMesh應(yīng)用了Decorator模式,用filter截取request和response,把頁(yè)面組件head,content,banner結(jié)合為一個(gè)完整的視圖。通常我們都是用include標(biāo)簽在每個(gè)jsp頁(yè)面中來不斷的包含各種header, stylesheet, scripts and footer,現(xiàn)在,在SiteMesh的幫助下,我們可以不再編寫那些重復(fù)性的代碼,從而集中在一個(gè)地方進(jìn)行管理.容器接收到頁(yè)面請(qǐng)求時(shí),會(huì)把請(qǐng)求傳遞給PageFilter,PageFilter收集應(yīng)用程序的響應(yīng)細(xì)節(jié),生成自定義的響應(yīng)對(duì)象,然后連同請(qǐng)求一起傳遞給web應(yīng)用程序.web應(yīng)用程序把響應(yīng)資源寫入到自定義響應(yīng)對(duì)象里,再返回給PageFilter.



SiteMesh使用:
    本事例使用基于Struts2來進(jìn)行編寫
    1.首先在我們的項(xiàng)目當(dāng)中添加Maven的依賴

Xml代碼  收藏代碼
  1. <dependency>  
  2.     <groupId>opensymphony</groupId>  
  3.     <artifactId>sitemesh</artifactId>  
  4.     <version>2.4.2</version>  
  5.     <type>jar</type>  
  6.     <scope>compile</scope>  
  7. </dependency>  
  8.   
  9. <dependency>  
  10.     <groupId>org.apache.struts</groupId>  
  11.     <artifactId>struts2-sitemesh-plugin</artifactId>  
  12.     <version>2.2.3</version>  
  13.     <type>jar</type>  
  14.     <scope>compile</scope>  
  15. </dependency>  


    2.在web.xml文件中增加如下配置
Xml代碼  收藏代碼
  1. <filter>  
  2.     <filter-name>sitemesh</filter-name>  
  3.     <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>  
  4. </filter>  
  5.       
  6. <filter-mapping>  
  7.     <filter-name>sitemesh</filter-name>  
  8.     <url-pattern>*.action</url-pattern>  
  9.     <dispatcher>REQUEST</dispatcher>  
  10.     <dispatcher>FORWARD</dispatcher>  
  11.     <dispatcher>INCLUDE</dispatcher>  
  12. </filter-mapping>  


    3.在WEB-INF建立decorators.xml,該文件描述各個(gè)裝飾器頁(yè)面和如何過濾頁(yè)面
Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.   
  4. <!-- defaultdir 屬性為通用頁(yè)面存放的路徑 -->  
  5. <decorators defaultdir="/WEB-INF/content/base">  
  6.       
  7.     <!-- excludes 為哪些頁(yè)面不需要進(jìn)行裝飾,這通常結(jié)合popup來使用 -->  
  8.     <excludes>  
  9.         <pattern>*no-decorate*</pattern>  
  10.         <pattern>/login*</pattern>  
  11.     </excludes>  
  12.       
  13.     <!-- decorator為指定裝飾頁(yè)面的名稱和路徑 -->  
  14.     <decorator name="main" page="main.jsp">  
  15.         <!-- pattern 為要過濾哪些頁(yè)面? * 代表所有頁(yè)面都進(jìn)行過濾-->  
  16.         <pattern>*</pattern>  
  17.     </decorator>  
  18.       
  19.     <decorator name="printable" page="printable.jsp"/>  
  20. </decorators>  

     以下為main.jsp代碼
Html代碼  收藏代碼
  1. <!--   
  2.     當(dāng)使用了SiteMesh后,本頁(yè)面main.jsp就會(huì)變成所有頁(yè)面的模板  
  3.     我們可以在這個(gè)頁(yè)面中引入各種的css,js和其他的頁(yè)面,  
  4.     亦可以在這里使用jsp的include標(biāo)簽引入其他的頁(yè)面,  
  5.     更甚者可以在這里設(shè)定全局的js,例如jQuery的$.(document).ajaxStart(function(){})  
  6.  -->  
  7. <html>  
  8. <head>  
  9.     <!-- decorator:title可以將被過濾的頁(yè)面的title填充到這里 -->  
  10.     <title><decorator:title/></title>  
  11.     <!-- decorator:head 可以將被過濾的頁(yè)面中的head填充到這里 -->  
  12.     <decorator:head />  
  13. </head>  
  14. <body>  
  15. <div class="content">  
  16.     <!-- decorator:head 可以將被過濾的頁(yè)面中的body填充到這里 -->  
  17.     <decorator:body />   
  18. </div>  


總結(jié):
    使用了SiteMesh后,更集中的管理了各個(gè)頁(yè)面的標(biāo)簽,css,js的引入,雖然在實(shí)際開發(fā)當(dāng)中一般會(huì)首先固定各個(gè)技術(shù)使用的版本,但由于需求的變更和技術(shù)的更新發(fā)展,有時(shí)候不得不更新所使用的版本,大量分散在不同頁(yè)面的引入標(biāo)簽修改起來簡(jiǎn)直就是噩夢(mèng)般的事情,而且SiteMesh的簡(jiǎn)單易用,我們何樂而不為的去使用SiteMesh呢?

       

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多