SiteMesh的使用

最近在搭建新的后台管理系统框架的时候需要用到三栏布局,如下图所示,之前采用的  frameset  框架,据说有很多的缺陷,所以今天就试着用SiteMesh进行布局。

 

SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。

它定义了一个过滤器,然后把页面都加上统一的头部和底部。

需要先在WEB-INF/lib下引入sitemesh的jar包:http://wiki.sitemesh.org/display/sitemesh/Download 。这里使用2.4版本。

 

过滤器定义:


在web.xml中加入以下配置文件

  1. <!-- SiteMesh -->  
  2.    <span style="white-space:pre"</span><filter>  
  3.     <filter-name>sitemeshFilter</filter-name>  
  4.     <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>  
  5. </filter>  
  6. <filter-mapping>  
  7.     <filter-name>sitemeshFilter</filter-name>  
  8.     <url-pattern>/*</url-pattern>  
  9. </filter-mapping>  

decorators.xml文件:


WEB-INF下新建decorators.xml文件,并加入以下代码:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <decorators defaultdir="/WEB-INF/layouts/">  
  3.       
  4.     <!-- 此处用来定义不需要过滤的页面 -->  
  5.     <excludes>  
  6.         <pattern>/js/**</pattern>  
  7.         <pattern>/css/**</pattern>  
  8.         <pattern>/images/**</pattern>  
  9.         <pattern>/ueditor/**</pattern>  
  10.         <pattern>/static/**</pattern>  
  11.     </excludes>  
  12.       
  13.     <!-- 用来定义装饰器要过滤的页面 -->  
  14.     <decorator name="default" page="default.jsp">  
  15.         <pattern>/*</pattern>  
  16.     </decorator>  
  17.       
  18. </decorators>  

不用过滤/static/目录下的文件,然后指定了装饰器:/WEB-INF/layouts/default.jsp。

我用的是spring MVC,目录结构大致:

default.jsp:

 

 
  1. <pre name="code" class="html"><%@ page contentType="text/html;charset=UTF-8"%>  
  2. <%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %>    
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  4.   
  5. <c:set var="ctx" value="${pageContext.request.contextPath}" />  
  6.   
  7. <!DOCTYPE html>  
  8. <html>  
  9. <head>  
  10. <title>QuickStart示例:<sitemesh:title/></title>  
  11. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />  
  12. <meta http-equiv="Cache-Control" content="no-store" />  
  13. <meta http-equiv="Pragma" content="no-cache" />  
  14. <meta http-equiv="Expires" content="0" />  
  15.   
  16. <link type="image/x-icon" href="${ctx}/static/images/favicon.ico" rel="shortcut icon">  
  17. <link href="${ctx}/sc/bootstrap/2.3.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" />  
  18. <link href="${ctx}/sc/jquery-validation/1.11.0/validate.css" type="text/css" rel="stylesheet" />  
  19. <link href="${ctx}/css/base/default.css" type="text/css" rel="stylesheet" />  
  20. <script src="${ctx}/sc/jquery/jquery-1.9.1.min.js" type="text/javascript"></script>  
  21. <script src="${ctx}/sc/jquery-validation/1.11.0/jquery.validate.min.js" type="text/javascript"></script>  
  22. <script src="${ctx}/sc/jquery-validation/1.11.0/messages_bs_zh.js" type="text/javascript"></script>  
  23.   
  24. <sitemesh:head/>  
  25. </head>  
  26.   
  27. <body>  
  28.     <div class="container">  
  29.         <%@ include file="/WEB-INF/layouts/header.jsp"%>  
  30.         <div id="content">  
  31.             <sitemesh:body/>  
  32.         </div>  
  33.         <%@ include file="/WEB-INF/layouts/footer.jsp"%>  
  34.     </div>  
  35.     <script src="${ctx}/sc/bootstrap/2.3.0/js/bootstrap.min.js" type="text/javascript"></script>  
  36. </body>  
  37. </html>  

首先引入了SiteMesh标签。

<sitemesh:title/> 会自动替换为被过滤页面的title。

<sitemesh:head/> 会把被过滤页面head里面的东西(除了title)放在这个地方。

<sitemesh:body/> 被过滤的页面body里面的内容放在这里。

在content的上下引入了header和footer。

我们在头部引入了js和css,就可以重用了。

 

使用:


使用的过程中,几乎感受不到SiteMesh的存在。例如下面的页面: 

  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <!-- 第一个被装饰(目标)页面  -->  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  8. <title>被装饰(目标)页面title</title>  
  9. <script type="text/javascript" src="/js/hello.js"></script>  
  10. </head>  
  11.   
  12. <body>  
  13.     <h4>被装饰(目标)页面body标签内内容。</h4>  
  14.     <h3>使用SiteMesh的好处?</h3>  
  15.     <ul>  
  16.         <li>被装饰(目标)页面和装饰页面完全分离。</li>  
  17.         <li>做到真正的页面复用,一个装饰页面装饰多个被装饰(目标)页面。</li>  
  18.         <li>更容易实现统一的网站风格。</li>  
  19.         <li>还有。。。</li>  
  20.     </ul>  
  21. </body>  
  22. </html>  

这就是一个普通的页面,但是被SiteMesh装饰之后,就会自动去掉<html> <body> <head>等元素,然后把相应的东西放在模板对应位置上。

我们来看一下,被SiteMesh装饰过的页面源代码:

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <title>QuickStart示例:被装饰(目标)页面title</title>  
  5. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />  
  6. <meta http-equiv="Cache-Control" content="no-store" />  
  7. <meta http-equiv="Pragma" content="no-cache" />  
  8. <meta http-equiv="Expires" content="0" />  
  9.   
  10. <link type="image/x-icon" href="/SpringMVC/static/images/favicon.ico" rel="shortcut icon">  
  11. <link href="/SpringMVC/sc/bootstrap/2.3.0/css/bootstrap.min.css" type="text/css" rel="stylesheet" />  
  12. <link href="/SpringMVC/sc/jquery-validation/1.11.0/validate.css" type="text/css" rel="stylesheet" />  
  13. <link href="/SpringMVC/css/base/default.css" type="text/css" rel="stylesheet" />  
  14. <script src="/SpringMVC/sc/jquery/jquery-1.9.1.min.js" type="text/javascript"></script>  
  15. <script src="/SpringMVC/sc/jquery-validation/1.11.0/jquery.validate.min.js" type="text/javascript"></script>  
  16. <script src="/SpringMVC/sc/jquery-validation/1.11.0/messages_bs_zh.js" type="text/javascript"></script>  
  17.   
  18.   
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  20.   
  21. <script type="text/javascript" src="/js/hello.js"></script>  
  22.   
  23. </head>  
  24.   
  25. <body>  
  26.     <div class="container">  
  27. <span style="white-space:pre">    </span><div id="header">  
  28. <span style="white-space:pre">    </span></div>  
  29.         <div id="content">  
  30.               
  31.     <h4>被装饰(目标)页面body标签内内容。</h4>  
  32.     <h3>使用SiteMesh的好处?</h3>  
  33.     <ul>  
  34.         <li>被装饰(目标)页面和装饰页面完全分离。</li>  
  35.         <li>做到真正的页面复用,一个装饰页面装饰多个被装饰(目标)页面。</li>  
  36.         <li>更容易实现统一的网站风格。</li>  
  37.         <li>还有。。。</li>  
  38.     </ul>  
  39.   
  40.         </div>  
  41.           
  42. <div id="footer">  
  43.     Copyright &copy; 2005-2012 <href="">spring.org.cn</a>  
  44. </div>  
  45.   
  46.   
  47.     </div>  
  48.     <script src="/SpringMVC/sc/bootstrap/2.3.0/js/bootstrap.min.js" type="text/javascript"></script>  
  49. </body>  
  50. </html>  

总结:


SiteMesh配置简单,使用灵活,几乎不会影响我们的正常开发,作为一个默默无闻的好帮手,非常推荐使用。

 

 

----by:songfayuan 2016-09-05  点击这里给我发消息

转载于:https://www.cnblogs.com/songfayuan/articles/7290315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值