<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 19, comments - 53, trackbacks - 0, articles - 283
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    SiteMesh 入門實(shí)例

    Posted on 2010-05-11 21:45 Gavin.lee 閱讀(1198) 評論(0)  編輯  收藏 所屬分類: SiteMesh 頁面裝飾組件

    一、SiteMesh設(shè)計思想

    用戶發(fā)送request至服務(wù)器,服務(wù)器根據(jù)此request生成動態(tài)數(shù)據(jù),生成網(wǎng)頁,準(zhǔn)備返回給客戶端。就在返回前,SiteMesh進(jìn)行攔截,對此網(wǎng)頁進(jìn)行解析,將title、body等部分拆解出來,套上模板后,再返回給客戶端。由于SiteMesh在返回客戶端的最后一步工作,此時的網(wǎng)頁已經(jīng)具備了標(biāo)準(zhǔn)的html網(wǎng)頁格式,因此SiteMesh只需解析標(biāo)準(zhǔn)的html網(wǎng)頁,無需考慮各個Web應(yīng)用是應(yīng)用了JSP、ASP,還是Velocity技術(shù),相當(dāng)靈活。
        SiteMesh官方地址:http://www.opensymphony.com/sitemesh/index.html
        SiteMesh官方下載:http://www.opensymphony.com/sitemesh/download.html
        SiteMesh 2.3下載:http://www.javauu.com/downloads/resource/sitemesh-2.3.zip

    二、SiteMesh簡單部署到實(shí)現(xiàn)

    配置:
    除了要copy到WEB-INF/lib中的sitemesh.jar外,還有2個文件要建立到WEB-INF/:
    sitemesh.xml (可選)  
    decorators.xml
    sitemesh.xml 可以設(shè)置2種信息:
    1.Page Parsers :負(fù)責(zé)讀取stream的數(shù)據(jù)到一個Page對象中以被SiteMesh解析和操作。(不太常用,默認(rèn)即可)
    2.Decorator Mappers : 不同的裝飾器種類,我發(fā)現(xiàn)2種比較有用都列在下面。一種通用的mapper,可以指定裝飾器的配置文件名,另一種可打印的裝飾器,可以允許你當(dāng)用http://localhost/aaa/a.html?printable=true方式訪問時給出原始頁面以供打印(免得把header,footer等的花哨的圖片也搭上)

    (但一般不用建立它,默認(rèn)設(shè)置足夠了:com/opensymphony/module/sitemesh/factory/sitemesh-default.xml), 范例如下:

    <sitemesh>
         
    <page-parsers>
           
    <parser default="true" class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />
           
    <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
           
    <parser content-type="text/html;charset=ISO-8859-1" class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
         
    </page-parsers>

         
    <decorator-mappers>
           
    <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
             
    <param name="config" value="/WEB-INF/decorators.xml" />
           
    </mapper>
             
    <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
                
    <param name="decorator" value="printable" />
                
    <param name="parameter.name" value="printable" />
                
    <param name="parameter.value" value="true" />
             
    </mapper>
      
    </decorator-mappers>
    </sitemesh> 


    實(shí)現(xiàn):
    這里定義了一個過濾器.所有的請求都交由sitemesh來處理,在web.xml中加入如下片段:

    <filter>   
        
    <filter-name>sitemeshfilter-name>   
        
    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilterfilter-class>   
    <filter>   
       
    <filter-mapping>   
        
    <filter-name>sitemeshfilter-name>   
        
    <url-pattern>/*url-pattern>   
    <filter-mapping>   
       
    <taglib>   
        
    <taglib-uri>sitemesh-decoratortaglib-uri>   
        
    <taglib-location>/WEB-INF/sitemesh-decorator.tldtaglib-location>   
    <taglib>   
       
    <taglib>   
        
    <taglib-uri>sitemesh-pagetaglib-uri>   
        
    <taglib-location>/WEB-INF/sitemesh-page.tldtaglib-location>   
    <taglib>

     
    建立WEB-INF/decorators.xml描述各裝飾器頁面。

    <decorators defaultdir="/_decorators">  
        
    <decorator name="main" page="main.jsp">         
            
    <pattern>*pattern>     
        
    <decorator>
        
        
    <!-- 不需要裝飾的目錄 -->
        
    <excludes>
            
    <pattern>/public/*</pattern>
        
    </excludes> 
        
        
    <!-- 需要裝飾的目錄 -->
        
    <decorator name="inside" page="inside.jsp" role="custom" webapp="client">
            
    <pattern>/admin/*</pattern>
            
    <pattern>/user/*</pattern>
        
    </decorator>
    <decorators>

    各標(biāo)簽常見屬性的含義為:
    defaultdir: 包含裝飾器頁面的目錄
    page : 頁面文件名
    name : 別名
    role : 角色,用于安全
    webapp : 可以另外指定此文件存放目錄
    Patterns : 匹配的路徑,可以用*,那些被訪問的頁面需要被裝飾


     在web下面建一個文件夾取名decorators.在decoratots下面創(chuàng)建上面定義的模板頁面main.jsp,內(nèi)容如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        
    <head>
           
    <title><decorator:title default="默認(rèn)title" /></title>
        
    <body>
            
    <h2>SiteMesh裝飾header</h2>        
            
    <p>Add head decorator</p>
            
    <decorator:body />    
            
    <p>Add foot decorator</p>
            
    <h2>SiteMesh裝飾footer</h2>
        
    </body>
    </html>

    說明:

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

    此處為decorator標(biāo)簽的聲明。因?yàn)槲覀兿旅嬉褂玫剿?/p>

    <decorator:title />

    把請求的原始頁面的title內(nèi)容插入到<title></title>,比如我們要請求index.jsp頁面的時候。會把index.jsp中的title的內(nèi)容放入到這里

    <decorator:body />


    把請求的原始頁面的body內(nèi)容插入到<body></body>,發(fā)現(xiàn)沒有我們在這句的前面加上了<p>Add head decorator...</p>和<p>Add foot decorator...</p>

    相當(dāng)于給我們請求的頁面的body內(nèi)容加上了頭部和尾部.實(shí)現(xiàn)了模板功能。


    在WEB-INF下創(chuàng)建我們要請求訪問的頁面index.jsp,內(nèi)容如下:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        
    <head>
           
    <title>SiteMesh Sample Site</title>
        
    </head>
        
    <body>
           Welcome to the SiteMesh sample
        
    </body>
    </html>

    把web工程部署到tomcat容器中。

    輸入http://localhost:8080/SitemeshSample/index.jsp


    頁面效果如下:

    Add head decorator
    Welcome to the SiteMesh sample 
    Add foot decorator


    不難發(fā)現(xiàn),我們index.jsp中只有Welcome to the SiteMesh sample... 一句。但是在返回給我們之前套上了main.jsp模板頁。在它的前面和后面分別加上了一句話。通過Sitemesh我們可以很容易實(shí)現(xiàn)頁面中動態(tài)內(nèi)容和靜態(tài)裝飾外觀的分離。


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲中文字幕一区精品自拍| 亚洲一区二区三区免费视频| 亚洲国产精品无码专区在线观看| 亚洲AV日韩AV鸥美在线观看| 亚洲色欲或者高潮影院| 亚洲日韩一区二区三区| 一级毛片不卡免费看老司机| 久热免费在线视频| 噼里啪啦免费观看高清动漫4 | 一二三四影视在线看片免费| 日韩成人免费在线| 亚洲五月综合缴情在线观看| 亚洲精品亚洲人成在线观看麻豆| 亚洲乱色伦图片区小说 | 丁香花在线观看免费观看图片 | 午夜视频免费成人| 中文字幕亚洲一区| 亚洲伦理一二三四| 一级做a爰片久久免费| 99精品视频在线视频免费观看 | 亚洲AV无码AV男人的天堂不卡 | 特级做A爰片毛片免费看无码| 成年黄网站色大免费全看| 国产又大又粗又硬又长免费| 亚洲高清国产AV拍精品青青草原| 国产成人亚洲精品| a毛片视频免费观看影院| 久久久久久国产精品免费免费| 亚洲色偷偷狠狠综合网| 亚洲另类图片另类电影| 精精国产www视频在线观看免费| 国产无人区码卡二卡三卡免费 | 久操视频免费观看| 日韩一区二区三区免费体验| 亚洲AV无码不卡无码| 色偷偷噜噜噜亚洲男人| 亚洲高清视频免费| 久久亚洲av无码精品浪潮| 亚洲高清中文字幕免费| 国产免费无码一区二区| 免费精品国产自产拍观看|