SiteMesh框架统一布局用法介绍
生活随笔
收集整理的這篇文章主要介紹了
SiteMesh框架统一布局用法介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SiteMesh 是一個網頁布局和修飾的框架,基于 Servlet 中的 Filter,類似于 ASP.NET 中的‘母版頁’技術。
介紹:
1,SiteMesh是OpenSymphony團隊開發的JEE框架之一,它是一個非常優秀的頁面裝飾器框架。它通過對所有的用戶請求進行過濾,并對服務器向客戶端響應也進行過濾,從而給原始的服務器響應加入一定的裝飾,可以是header,footer等。 2,然后將經過裝飾后的頁面送回瀏覽者.對于被裝飾的頁面而言,它無需知道自身被誰裝飾,也無從知道自身被誰裝飾,SiteMesh通過配置文件來配置指定的裝飾器,用于過濾某些頁面,則該裝飾器會裝飾這些頁面,從而提供更好的頁面效果。 3,通過SiteMesh的頁面裝飾,可以提供更好的代碼復用,所有的頁面裝飾效果耦合在目標頁面中,無需使用include指令來顯式包含裝飾效果,目標頁面與裝飾頁面完全分高.提供更好的解耦,而且可以應用中所有的頁面都使用相同的裝飾頁面,整個Web應用會有更統一的風格,會提供更好的整體效果. 簡單來說,Sitemesh的流程就是:通過Filter來截取request和response,然后給原始的頁面加入一定的裝飾,再把結果返回給客戶端. 結構圖SiteMesh的官方網站:http://wiki.sitemesh.org/wiki/display/sitemesh/Home
使用流程:
可以網上下載SiteMesh3.0的jar包,這里介紹使用Maven。1,新建一個maven工程,在pom.xml中配置如下:
<!-- 網頁布局的前端框架 --><dependency><groupId>org.sitemesh</groupId><artifactId>sitemesh</artifactId><version>3.0.0</version></dependency>
2,在web.xml中配置SiteMesh的過濾器: <!-- 網頁布局前端框架的過濾器 --><filter><filter-name>sitemesh</filter-name><filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class></filter><filter-mapping><filter-name>sitemesh</filter-name><url-pattern>/*</url-pattern></filter-mapping>
3,在WEB-INF下,也就是和web.xml同級目錄下新建一個sitemesh3.xml,這里來配置哪些展示頁面用此框架來修飾,哪些不用此框架來修飾,也是類似前臺頁面的過濾器: <?xml version="1.0" encoding="UTF-8"?> <sitemesh><!-- 指明滿足“/*”的頁面,將被“/pub.jsp”所裝飾 --><mapping path="/*" decorator="/pub.jsp" /><!-- 指明滿足“/no_mytest*”的頁面,將被排除,不被裝飾 --><mapping path="/no_mytest*" exclue="true" /> </sitemesh> 這是比較簡單的配置,指明除根目錄下的所有頁面,除去/no_mytest*下的頁面,都要被pub.jsp頁面去修飾。
更多的配置: a,默認情況下, sitemesh 只對 HTTP 響應頭中 Content-Type 為 text/html 的類型進行攔截和裝飾,那么如果我們想對其他的頁面也進行修飾,我們應該添加更多的響應頭:
<mime-type>text/html</mime-type> <mime-type>application/vnd.wap.xhtml+xml</mime-type> <mime-type>application/xhtml+xml</mime-type> b,如果我們不想網站僅僅只使用一套的裝飾器,不同的模塊想要用不同的裝飾器,那么我們可以將不同的路徑使用不同的裝飾器: <mapping path="/admin/*" decorator="/another-decorator.html" /> <mapping path="/*.special.jsp" decorator="/special-decorator.html" /> c,對同一路徑下的不同頁面也可以使用不同的裝飾器: <mapping><path>/articles/*</path><decorator>/decorators/article.html</decorator><decorator>/decorators/two-page-layout.html</decorator><decorator>/decorators/common.html</decorator> </mapping>
4,定義一個母版頁,也就是用該頁面做統一布局頁面: <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><sitemesh:write property='title' /></title> <sitemesh:write property='head' /> </head> <body> <center><sitemesh:write property='title' /><br /><sitemesh:write property='body' /> </center><div style="float:left"><ul><li><a href="index.jsp">菜單管理</a></li><li><a href="list.jsp">用戶管理</a></li><li><a href="no_mytest/list.jsp">角色管理</a></li></ul></div> </body> </html>
<sitemesh:title/>: 會自動替換為被過濾頁面的title。 <sitemesh:head/>: 會把被過濾頁面head里面的東西(除了title)放在這個地方。
<sitemesh:body/> :被過濾的頁面body里面的內容放在這里。
頭部引入js和css以及div中的內容,都可以在其他重用,在被過濾頁面都是可見的,而且還有一個好處,只需要定義好pub頁面的樣式即可。
適用場景:
使用SiteMesh框架可以較快捷的開發頁面要求統一簡潔的網站,例如管理系統,網站后臺等非靈活網站,前端頁面管理可以類似瀏覽器的tag,如圖:擴展:
如何使用的自定義標簽?Sitemesh 3 默認只提供了 body,title,head 等HTML常用的標簽?類型,我們在實際開發中,HTML頁面往往需要用到很多自定義的標簽,那么?我們可以通過實現 TagRuleBundle 類來擴展自定義的標簽。
自定義標簽使用流程: 1,實現 TagRuleBundle類: public class MyTagRuleBundle implements TagRuleBundle {@Overridepublic void install(State defaultState, ContentProperty contentProperty,SiteMeshContext siteMeshContext) {defaultState.addRule("myHeader", new ExportTagToContentRule(contentProperty.getChild("myHeader"), false));}@Overridepublic void cleanUp(State defaultState, ContentProperty contentProperty,SiteMeshContext siteMeshContext) {} }
2,在sitemesh3.xml 配置文件中進行配置: <content-processor><tag-rule-bundle class="com.test.MyTagRuleBundle" /> </content-processor>
總結
以上是生活随笔為你收集整理的SiteMesh框架统一布局用法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业联考335分,联考专业分、文化
- 下一篇: 24安装失败 spss win10_教你