1、问题的提出

在开发Web 应用时,Web页面可能由不同的人参与开发,因此开发出来的界面通常千奇百怪、五花八门,风格难以保持一致。

为了统一界面的风格,Struts 框架提供了一个标签库Tiles 来进行网页的框架布局 。

它由一个主框架文件(frame.jsp)
包含四个文件(头文件(header.jsp)、菜单文件(menu.jsp)、底部文件(foot.jsp)、内容文件(body.jsp))。
其中header.jsp、foot.jsp 内容不改变,body.jsp的内容 随着menu.jsp 的动作而发生改变。
这种方式有两个不足之处:
● 每个JSP 页面都需要拆分为多个JSP文件(frame.jsp 和 body.jsp)
● 如果要修改整个站点的布局,必须修改类似frame.jsp 的框架页面。
 
SiteMesh是类似问题的另一种解决方案。
为了解决Struts Tiles 的不足之处,SiteMesh 框架出现了,SiteMesh框架采用了装饰模式,它为每一个请求的页面进行修饰,附加上其他的内容后返回给客户端。
实际上,SiteMesh是一个页面过滤器,在页面被处理之后,返回Web 浏览器之前,对页面做了一些附加操作。

2、SiteMesh 简介

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

Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。

它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。
它不仅仅能处理动态的内容,如jsp,PHP,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。

3、开发步骤:

3.1、下载和安装SiteMesh
安装SiteMesh
 将下载的sitemesh-2.4.1.jar 添加到项目的WebContent\WEB_INF\lib目录下。
     注:在sitemesh-2.4.1.jar 包中的META-INF\目录下有两个标签库文件sitemesh-decorator.tld、sitemesh-page.tld
 配置web.xml文件

 在WEB-INF目录下加入decorators.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators"> <!--装饰文件存放的目录-->
          <decorator name="main" page="main.jsp">   <!--装饰文件为main.jsp-->
                    <pattern>/test.jsp</pattern>  <!--要被装饰的页面,如是“ /* ”指对WebContent\目录下的所有JSP页面进行装饰-->
          </decorator>
          <decorator name="panel" page="panel.jsp"/>
          <decorator name="printable" page="printable.jsp"/>
          <excludes>    <!--过滤不被装饰的页面-->
                     <pattern>/exclude.jsp</pattern>
                     <pattern>/exclude/*</pattern>
         </excludes>
</decorators>
 添加sitemesh.xml 文件
sitemesh.xml 在下载包的sitemesh-2.4.1\src\example-webapp\WEB-INF\ 目录下
sitemesh.xml也放在WEB-INF下面,配置sitemesh的行为,使用何种页面解析器和装饰器,
也可以不要该文件,sitemesh.jar里面自带的默认的配置,包含更多装饰器,
如果不需要那些更多的装饰器,则最好自己配置,避免多个装饰器调用造成的无谓性能损失。 

<sitemesh>

<property name="decorators-file" value="/WEB-INF/decorators.xml"/>\

<excludes file="${decorators-file}"/>

<page-parsers>
        <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
    </page-parsers>

<decorator-mappers>
        <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
            <param name="config" value="${decorators-file}"/>
        </mapper>
    </decorator-mappers>
</sitemesh>

3.2、一个例子
① 在WebContent\decorators\目录下创建装饰文件main.jsp 如下:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
      <head>
                <title>My Site-<decorator:title default="Welcome!"/></title>
                <decorator:head/>
      </head>
      <body>
               <h1><decorator:title default="Welcome to MyHouse"/></h1>
               <p><decorator:body/></p>
               <p><small>(<a href="#">printable version</a>)</small></p>
      </body>
</html>
② 在WebContent\目录下创建两个文件test.jsp、test1.jsp
test.jsp 和test1.jsp 的内容一样都是如下:
<html>
         <head>
                   <title>Simple Document</title>
         </head>
         <body>
                    Hello World!<br/>
         </body>
</html>
③ 在浏览器中打开这两页面 
test.jsp 是经过SiteMesh 装饰过的页面,test1.jsp 是没有经过装饰的页面。 

SiteMesh入门(1-1)SiteMesh是什么?的更多相关文章

  1. sitemesh入门

    今天在公司用到了sitemesh这个框架. 网上的资料已经有很多了.  在此就不做具体介绍了, 仅仅做个笔记. sitemesh是一种模板框架,是为了解决页面重复代码而设计的. 设计思想 siteme ...

  2. Maven下SiteMesh的使用

    先白扯两句,为什么用SiteMesh,当然是减少重复代码,让程序员更加转自己的那一小块. 优点呢:结构化,重用 缺点:呵呵呵,性能,尤其是GC 至于3.0是不是有很大提升,请大神来分析一下. 性能你还 ...

  3. eclipse中整合springMvc,velocity和sitemesh

    1.项目所需要jar包 (有些可能多余) 2.创建UserController   目录如下: package qust.thb.usermanage.controller; import org.s ...

  4. Tiles & SiteMesh

    Tiles & SiteMesh 这两天在给公司的新项目搭框架,在配tiles框架的时候发现一个小问题:    比如开发团队一共5人,每人10个页面,如果按照简单的tiles框架配置方法,每个 ...

  5. sitemesh学习笔记(2)

    之前我也是通过网上一些资料来学习sitemesh的,后来发现那些资料都比较老了,现在最近的已经是sitemesh3了而我之前看的是sitemesh2.3,今天重新去看了一些sitemesh3的资料,发 ...

  6. sitemesh学习笔记(1)

    最近在学习web开发的时候,发现很多的页面都存在同样的导航栏,登陆栏,js,jQuery等等相同的元素.这样就感觉开发变得好臃肿啊,并且,有时候改一个元素,就要把所有包含这个元素的页面全部重新码一遍, ...

  7. SiteMesh, SpringMVC, Shiro 配置

    1. 首先在在web.xml文件中,加入SiteMesh和shiro的过滤器,保证SiteMesh的过滤器配置放在shiro的过滤器后面,不然的话,shiro的标签不能正确处理. <?xml v ...

  8. J2EE sitemesh使用

    maven包含sitemesh: <dependency> <groupId>opensymphony</groupId> <artifactId>si ...

  9. SpringMVC+spring-security+sitemesh+hibernate+freemarker整合-转

    http://www.oschina.net/code/snippet_170632_46774 代码分享 当前位置: 代码分享 » Java  » Web编程 搜 索   SpringMVC+spr ...

随机推荐

  1. 关于Android sdkmanager目录结构的总结

    SDK Platform是指一些已经编写好的库函数,类文件,我们可以直接调用 Samples for SDK是指一些样本代码,可以导入eclipse运行出来查看里面函数的效果 以system imag ...

  2. 3D模型展示以及体积、表面积计算

    本文原创 如转载请注明出处!!! 本博客地址http://www.cnblogs.com/we-jack 本文原创,如果有同样需求的小伙伴请第一时间联系我 或者在留言区留言 上次为大家提供了3D模型的 ...

  3. oracle 10g数据库下的 XDB组件的重新安装

    emmmm,这是一个不做死就不会的过程!!! 今天在导出数据库时,遇到了报错信息,其实开发说这个报错没关系了,但作死如楼主,一定要把这个错给解决了,然后就有了下面的作死过程. 错误关键字是:packa ...

  4. Unity3d底层数据传递分析

    WeTest 导读 这篇文章主要分析了在Mono框架下,非托管堆.运行时.托管堆如何关联,以及通过哪些方式调用.内存方面,介绍了什么是封送,以及类和结构体的关系和区别. 一.托管交互(Interop) ...

  5. mysql数据库索引优化与实践(一)

    前言 mysql数据库是现在应用最广泛的数据库系统.与数据库打交道是每个Java程序员日常工作之一,索引优化是必备的技能之一. 为什么要了解索引 真实案例 案例一:大学有段时间学习爬虫,爬取了知乎30 ...

  6. 《UNIX网络编程 卷1:套接字联网API》读书笔记(一):网络编程简介

    概述 要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议.大多数网络是按照划分成客户和服务器来组织的.本章及后续章节的焦点是TCP/IP协议族,也可称为网际协议族.下图为客户与服务器 ...

  7. Oracle安装11.2.0.4.180116补丁及如何检查数据库安装补丁

    最近做了一个安装11.2.0.4.180116补丁的实验,突然想起之前和同事讨论的一个问题:如何检查数据库安装补丁的版本,之前搜到的是去查dba_registry_history,有的说在操作系统中执 ...

  8. SDK提交到CocoaPods

    一:GitHub新建仓库,并clone到本地 1.注册GitHub账号并登录 2.右上方点击+,新建仓库(仓库名字(Repository name).仓库权限(Public).readme.licen ...

  9. CentOS 6.5 通过命令行安装发送邮件

    1.安装sendmail: yum install sendmail 2.安装mailx: yum install mailx -y 3.编辑发送的配置文件: vi /etc/mail.rc #在最后 ...

  10. [BZOJ 1297][SCOI2009]迷路

    1297: [SCOI2009]迷路 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1418  Solved: 1017[Submit][Status ...