SiteMesh的使用

一、SiteMesh简介

iteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。


二、SiteMesh原理

SiteMesh框架是OpenSymphony团队开发的一个非常优秀的页面装饰器框架,它通过对用户请求进行过滤,并对服务器向客户端响应也进行过滤,然后给原始页面加入一定的装饰(header,footer等),然后把结果返回给客户端。通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需再使用include指令来包含装饰效果,目标页与装饰页完全分离,如果所有页面使用相同的装饰器,可以是整个Web应用具有统一的风格。


三、SiteMesh简单例子

1.首先引入pom依赖包,如下:

<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>2.4.2</version>
</dependency>


2.在web.xml配置sitemesh,如下:

<filter>
<filter-name>sitemeshFilter</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemeshFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


3.在WEB-INF根目录下新建decorators.xml文件,包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 这里的defaultdir是装饰页面所在的路径-->
<decorators defaultdir="/WEB-INF/jsp/common">
<excludes>

<!-- 此处用来定义不需要过滤的页面-->
<pattern>/static/*</pattern>
<pattern>/cxf/*</pattern>
<pattern>/api/*</pattern>
</excludes>


<!-- 这里的page是装饰页面的文件名称-->
<decorator name="dashbord" page="INSPINIA_template_new.jsp">

<!-- 需要过滤的页面-->
<pattern>/workspace/dashboard</pattern>
<pattern>/awards/personalAward</pattern>
</decorator>  
<decorator name="box" page="box_template.jsp">
<pattern>/*/box/*</pattern>
</decorator>
</decorators>


4.INSPINIA_template_new.jsp(装饰者页面)代码如下:

  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6.  <!-- 第一个装饰页面 -->  
  7.     <head>  
  8.  <!-- 从被装饰页面获取title标签内容,并设置默认值-->  
  9.  <title><decorator:title default="默认title"/></title>  
  10.  <!-- 从被装饰页面获取head标签内容 -->  
  11.         <decorator:head/>  
  12.     </head>  
  13.   
  14.     <body>  
  15.        <h2>SiteMesh装饰header</h2>  
  16.        <hr />  
  17.     <!-- 从被装饰页面获取body标签内容 -->  
  18.     <decorator:body />  
  19.        <hr />  
  20.        <h2>SiteMesh装饰footer</h2>  
  21.     </body>  
  22. </html>  

5.创建一个被装饰着页面index.jsp,包含以下内容:
  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.  </head>  
  10.     
  11.  <body>  
  12.  <h4>被装饰(目标)页面body标签内内容。</h4>  
  13.  <h3>使用SiteMesh的好处?</h3>  
  14.  <ul>  
  15.      <li>被装饰(目标)页面和装饰页面完全分离。</li>  
  16.      <li>做到真正的页面复用,一个装饰页面装饰多个被装饰(目标)页面。</li>  
  17.       <li>更容易实现统一的网站风格。</li>  
  18.       <li>还有。。。</li>  
  19.      </ul>  
  20.  </body>  
  21. </html>  
这样就能将被装饰者的页面(index.jsp)填充到装饰着页面上(INSPINIA_template_new.jsp)。

四、总结
从以上的例子,可以看出通过SiteMesh装饰,不需要在每个目标页面中将header和footer等共同文件include进去,被装饰(目标)页面和装饰页面完全分离。
本文只对SiteMesh做一个简单的介绍,SiteMesh可以Velocity,FreeMarker等开源模板工具结合使用,降低页面开发复杂度。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值