SiteMesh介绍

1. SiteMesh简介

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

2. SiteMesh原理

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

3. SiteMesh3

SiteMesh3只有Alpha2版本而且很久没更新了,它号称性能快3倍内存少1倍。

另外,Atlassian公司因为在自己的产品中使用了SiteMesh2,所以后来也一直有维护,出到了2.5-atlassian-9版,不过不在maven中央库中,可以在这里下载。

4. SiteMesh2的使用

引入SiteMesh的依赖

在pom.xml中添加如下:

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

添加过滤器

在web.xml中添加过滤器:

<filter>
	<filter-name>sitemesh</filter-name>
	<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>sitemesh</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

新建decorators.xml文件

在WEB-INF下新建decorators.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<decorators defaultdir="/WEB-INF/layouts/">
    <!-- 此处用来定义不需要过滤的页面 -->
    <excludes>
        <pattern>/static/*</pattern>
    </excludes>

    <!-- 用来定义装饰器要过滤的页面 -->
    <decorator name="default" page="default.jsp">
        <pattern>/*</pattern>
    </decorator>
</decorators>

理论上SiteMesh只会搞那些MIME type为html的页面,但在配置里先exclude掉一些静态内容和API的路径会更省心。

创建装饰器页面default.jsp

在decorators.xml中定义了一个装饰页面default.jsp:

< %@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
<head>
    <title>My Site - <decorator:title default="Welcome!" /></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <meta http-equiv="Cache-Control" content="no-store" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <decorator:head />
</head>
<body>
    <div id="content">
    	<decorator:body />
    </div>
</body>
</html>

装饰模板中可以使用的Sitemesh标签有:

  • 取出被装饰页面的head标签中的内容。

<decorator:head />
  • 取出被装饰页面的body标签中的内容。

<decorator:body />
  • 取出被装饰页面的title标签中的内容。default为默认值

<decorator:title default=""  />
  • 取出被装饰页面相关标签的属性值。

<decorator:getProperty property="" default=""  writeEntireProperty=""/>
  • 将被装饰页面构造为一个对象,可以在装饰页面的JSP中直接引用。

<decorator:usePage id="" />

创建被装饰页面test.jsp

创建test.jsp如下:

<html>
<head>
    <title>Hello world</title>
</head>
<body>
    <p>hello world.</p>
</body>
</html>

测试

访问test.jsp页面,查看源代码会显示如下:

<html>
<head>
    <title>My Site - Hello world</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <meta http-equiv="Cache-Control" content="no-store" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
</head>
<body>
	<div id="content">
   		<p>hello world.</p>
	</div>
</body>
</html>
时间: 2024-08-05 22:36:47

SiteMesh介绍的相关文章

DUBBO 详细介绍

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制. RPC: 一个远程过程调用的抽象,支持负载均衡.容灾和集群功能 Registry: 服务目录框架用于服务的注册和服务事件发布和订阅 Dubbo工作原理 Provider 暴露服务方称之为"服务提供者"

PhotoShop中正片负片叠底的原理介绍

关于正片叠底,正片,负片,通道,色相,色相环等等的相关理论一堆,大家可以从网上查到,原理就不讲了. 感觉单通道正片叠底效果应该属于填充色一类,但却与填充色又有很大的差异,与照片滤镜功能也有所差异,运用得当,最大的优点是在叠底后仍能保持比较好的照片通透度,而且简单易用,特别适合不太熟悉PS操作的朋友,此类方法运用广泛,配合起来使用比较方便,慢慢介绍吧. photoshop教程注:以下介绍的为RGB模式下的叠底,与CMYK模式下有所区别 方法一,单通道正片叠底 例一,叠出阳光色.提示:图片应尽量少漏

PS蒙版详细介绍

教程像飞特的朋友们介绍PS的蒙版原理和实例的运用,蒙版,通道,历史记录,图层样式,混合模式(已经开篇讲解了),智能对象,智能滤镜,嵌入图层,动作,其它,后期我针对这些,讲讲应用,希望大家有更深的感受.享受学习理论的乐趣. 先从蒙版说起吧. 讲到蒙版,要先了解下蒙版的由来.相信你一定能深刻领悟蒙版的使用技巧,看下提纲: 1,蒙版的由来 2,快速蒙版与选区 3,图层蒙版 4,PS CS5的蒙版新用法 一,蒙版的由来 犹记当年计划生育推行的时候,墙上,电线杆上,到处都是大红标语,如"计划生育好&quo

andriod平台"点九" .9.png设计介绍

"点九"是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形. 我们都知道android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边角会模糊失真. OK,在android平台下使用点九PNG技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示

Python中字典的基本知识初步介绍

  这篇文章主要介绍了Python中字典的基本知识初步介绍,是Python入门中的基础知识,需要的朋友可以参考下 字典是可变的,并且可以存储任意数量的Python对象,包括其他容器类型另一个容器类型.字典包括键对(称为项目)及其相应的值. Python字典也被称为关联数组或哈希表.字典的一般语法如下: ? 1 dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 可以用下面的方式创建字典: ? 1 2 dict1 = { 'abc':

简单介绍Python2.x版本中的cmp()方法的使用

  这篇文章主要介绍了简单介绍Python2.x版本中的cmp()方法的使用,然而该方法在Python3.x版本中已并不再内置...需要的朋友可以参考下 cmp()方法比较两个列表的元素. 语法 以下是cmp()方法的语法: ? 1 cmp(list1, list2) 参数 list1 -- 这是要进行比较的第一个列表 list2 -- 这是要进行比较的第二个列表 返回值 如果元素是相同类型的,执行比较,并返回结果.如果元素是不同的类型,检查,看看他们是否是数字 如果是数字必要时强制进行数字比较

百度卫士界面功能使用介绍

百度卫士1.0 Beta版发布 和百度杀毒一样,百度卫士也做出了"永久免费.不骚扰用户.不胁迫用户.不偷窥用户隐私"几大承诺.百度卫士自我总结为"轻.快.智.净"四大特点,目标自然是直指业界一哥:360安全卫士. 百度卫士的自我总结:"轻.快.智.净" 下面马上为大家介绍百度卫士1.0 Beta版的各项功能. 1.百度卫士界面设计赏析 百度卫士的安装界面与百度杀毒相似,不同的是主色使用了浅蓝色(百度杀毒使用的是绿色),百度卫士的安装包体积不超过1

Java语言抽象工厂创立性模式介绍

工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态.其中简单 工厂模式和工厂方法模式已经在前面作过介绍.在这里,我们来介绍抽象工厂模 式. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种形态. 抽象工厂模式的定义 抽象工厂模式是工厂方法模式的进一步扩广化和抽象化.我们给出抽象工厂 模式的类图定义如下. 图1. 抽象工厂模式的类图定义 从上图可以看出,简单工厂模式涉及到以下的角色 抽象工厂(AbstractFactory)类或接口 担任这个角色的是工厂方法模式的核心,它是与应

最实用Win7技巧快捷操作介绍

Win7的桌面设置更加个性化,我们的照片.喜欢的壁纸,都可以随时设为背景,而女生们的桌面壁纸很多都比较卡哇伊,但如果去做演示时,投射到投影公示,也许就会带来一些尴尬.其实在演示前,我们只需要通过Win X快捷键打开移动中心,对演示设置进行一些简单的设置即可,这样在演示时, 作为职场丽人,移动办公.快捷办公,都是必不可少,有一个安全稳定的操作系统和顺手的Office 办公软件尤为重要.微软Win7系统自发布以来就受到用户的欢迎,其美观的界面.流畅的操作体验.安全稳定的运行.高效便捷的功能特性,已经