之前我也是通过网上一些资料来学习sitemesh的,后来发现那些资料都比较老了,现在最近的已经是sitemesh3了而我之前看的是sitemesh2.3,今天重新去看了一些sitemesh3的资料,发现和2.3还是有点区别的。先不讲怎么使用把,先附上一图给小伙伴们。

这张图是不是很清晰地表现了sitemesh的工作流程啊,我觉得是很清晰了,结合我昨天讲的一看就懂了。

简单地再阐述下工作原理:

SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取reponse,并进行装饰后再交付给客户。

其中涉及到两个名词: 装饰页面(decorator page)和 “被装饰页面(Content page)" , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一直的页面,

并返回给客户

sitemesh3.0运行环境需要:servlet2.5, JDK1.5 以上。

下面就开始做一个简单的demo吧,首先先去下个sitemesh-3.0-alpha-2.jar包 给个地址:https://github.com/sitemesh/sitemesh3/downloads

下个完整版的,然后在sitemesh-3.0-alpha-2\sitemesh-3.0-alpha-2\dist有这个jar包,看清楚了是dist下面的sitemesh-3.0-alpha-2.jar,不是src下面的那个jar包,名字很象的,刚开始我就弄错了。

打开myeclipse,新建一个工程sitemesh1,把sitemesh-3.0-alpha-2.jar拖到lib下面,在WEB-INF下面新建一个web.xml,用来配置一个filter,

<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>

这个配置和2.3相比就是类包名不一样,其他都是差不多的。配好了过滤装置,接下来配置装饰页面:WEB-INF下面建一个sitemesh3.xml

这里的配置就有讲究了。容我细细道来

<sitemesh>
<!-- 根目录下的所有页面让 decorator.html装饰-->
<mapping path="/*" decorator="/decorator/decorator.jsp" />
</sitemesh>

如果我们有一张页面不需要被装饰,那么可以这样定义:

<mapping path="/javadoc/page.html" exclue="true"/>

也就是说在javadoc文件夹下面的page.html文件不会被装饰

如果想要整个文件夹下的页面都不被装饰可以用*代替:

<mapping path="/javadoc/*" exclue="true"/>

如果我们想要javadoc文件夹下的文件被多个装饰页面装饰,可以这样配置:

<mapping>

      <path>/javadoc/*</path>

      <decorator>/decorators/article.html</decorator>

      <decorator>/decorators/two-page-layout.html</decorator>

      <decorator>/decorators/common.html</decorator>

</mapping> 

这里javadoc下的所有页面被三个装饰页面装饰。我的demo做了第一个配置,所以我在WebRoot下面建立了decorator文件夹,在文件夹下面建立了一个decorator.jsp作为装饰页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title><sitemesh:write property="title"/></title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<h1>开头</h1>
<sitemesh:write property="body"/>
<h1>结尾</h1>
</body>
</html>

  

获取了被装饰页面的body放在开头和结尾中间。

myeclipse下自动帮你建立了一个index.jsp. 里面body内容默认是This is my JSP page,我们稍微修改一下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>Hello,sitemesh3</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
好久不见
</body>
</html>

  

所以我们的小demo就做好了,打开浏览器

轻轻松松合并title和body,神器啊

sitemesh学习笔记(2)的更多相关文章

  1. sitemesh学习笔记(1)

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

  2. sitemesh学习笔记(3)

    前两篇博客浅谈了一下sitemesh3.0和2.4的区别和简单用法,今天我做了一个结合sturts2的sitemesh构架,由于strusts2只能用sitemesh2.x的版本,与3.0目前还不能兼 ...

  3. SiteMesh学习笔记

    SiteMesh是一个轻量级的web应用框架,实现了Decorator模式.它的目标是将多个页面都将引用的jsp页面通过配置加载到相应的jsp文件中. 在我们的项目中,每个jsp都需要添加两个top和 ...

  4. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

随机推荐

  1. android对象关系映射框架ormlite之一对多(OneToMany)

    前两天,用ormlite对单张表进行了基本的操作,但是,我们知道通常情况对于单张表格进行操作在实际情况中很前两天不现实,那么ormlite能否像Hibenate那样实现多张表之间的一对多,多对多(即O ...

  2. java动态代理汇总

    逛知乎,有篇关于fastjson如此快为什么国外还是喜欢用Jackson的问题,高票答案中有一点提到了fastjson有很多写死的地方,也不太适合像spring这种依赖AOP的框架使用,顺便提到了AS ...

  3. 【Cocos2d-x】VS2012开发2dx无法解析的外部符号解决记录(第一篇)【转】

    come from http://acoder.me/cocos2d-unresolved-external-symbol.html 看到cocos2d-x带了扩展包,心动的想尝试下,以下分享下我使用 ...

  4. win7下安装ubuntu13.04

    http://teliute.org/linux/Ubsetup/jichu1/jichu1.html xp下安装 http://flysqrlboy.blog.51cto.com/5027074/8 ...

  5. HDU 4686 Arc of Dream (矩阵快速幂)

    Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  6. HashSet HashTable HashMap的区别 及其Java集合介绍

    (1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到). (2)HashSet以对象作为元素,而HashMap ...

  7. 用户管理 之 Linux 系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  8. Spring3系列3 -- JavaConfig

    Spring3系列3-JavaConfig-1 从Spring3开始,加入了JavaConfig特性,JavaConfig特性允许开发者不必在Spring的xml配置文件中定义bean,可以在Java ...

  9. WinDbg 命令集锦

    //断点相关 bp + 地址 设置断点bl  显示已经设定的断点bu + 地址 设置断点,但是这种类型断点再下一次启动时被记录bc 清除断点对于断点范围,可以用*匹配,-表示一个范围,表达多个可用,号 ...

  10. Rhino -- 基于java的javascript实现

    http://www.cnblogs.com/cczw/archive/2012/07/16/2593957.html