在一个站点的制备,几乎所有的页面将具有相同的部分。导航栏例如,顶,每一页都是一样的,在底部的版权声明,每一页还都是一样的。

因此,在顶部导航栏的准备。第一种方法是直接复制的所有导航栏的代码,这种方法是在发育早期easy但后期维护的噩梦,添加一个button,所有的页面都要改动。非常麻烦。

另外一种方法是将顶部导航栏专门写到一个文件里,全部的页面include这个文件。这样每一个页面都要写一个include语句。后期改动仅仅要改一个文件就能够了。可是这样的方法写出来的导航栏文件它不是一个完整的网页。而且每一个文件都要写上include语句,还是比較麻烦的。

为了让这样的页面的编写更加简单。SiteMesh应运而生。

SiteMesh通过装饰器模式攻克了这个问题。

以下就介绍装饰器的使用方法。

安装方法

第一步将sitemesh.xxx.jar放在/WEB-INF/lib中。

第二步在web.xml中增加SiteMesh的过滤器。

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

须要注意的是。假设你要和struts配合使用。那么filter-mapping要在struts之后,这样才干依照文件名称进行装饰,否则是依据action名称进行装饰。另外还要在filter-mapping中增加下面三行,目的是让struts在訪问jsp之前对文件进行装饰。假设不加的话是看不到装饰效果的。

<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>

第三步新建装饰器定义文件。文件的位置在/WEB-INF/decorators.xml。

内容例如以下:

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

这样SiteMesh插件就装好了。

插件的使用

首先编写一个很easy的装饰器文件,它的作用是在页面的头尾分别加上header和footer字样。当中\texttt{decorator:body}的作用是将真正的内容引进该文件。

<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
<head><title></title></head>
<body>
header
<decorator:body/>
footer
</body>
</html>

第二步在decorators.xml中声明该装饰器。

<?

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

>
<decorators defaultdir="/WEB-INF/decorators">
<decorator name="basic-theme" page="basic-theme.jsp">
<pattern>/test.jsp</pattern>
</decorator>
</decorators>

因为改动了web.xml,所以须要重新启动server才干看到效果。你会看至test.jsp头部和尾部添加header和footer。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

简化网站开发:SiteMesh小工具的更多相关文章

  1. C# JSON使用过程中开发的小工具

    我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...

  2. 简化bigdecimal计算的小工具类

    简化bigdecimal计算的小工具类 如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果( ...

  3. WordPress 网站开发“微信小程序“实战(二)

    原文链接:https://devework.com/wordpres...,转载请用明链注明来源,谢谢! 本文是"WordPress 开发微信小程序"系列的第二篇,本文记录的是开发 ...

  4. WordPress 网站开发“微信小程序“实战(三)

    本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...

  5. ANDROID开发实用小工具

    分享一些 Android开发中的实用小工具,你有发现好工具吗? 来这里分享一下呗 一.find bugs 静态检查工具 http://findbugs.sourceforge.net/ FindBug ...

  6. 动手使用ABAP Channel开发一些小工具,提升日常工作效率

    今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...

  7. ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...

  8. CodeMixerPro工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

  9. CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

随机推荐

  1. php压缩

    php压缩的一个demo,随便测试了一下,可以用 <?php class PHPZip { private $ctrl_dir = array(); private $datasec = arr ...

  2. 我的前端规范——HTML篇

    相关文章 简书原文:https://www.jianshu.com/p/a46ff0504982 我的前端规范——开篇:http://www.cnblogs.com/shcrk/p/9271561.h ...

  3. opencv和linux的关联

    这是一篇关于opencv和linux关联的文章

  4. js进阶 11-17 juqery如何查找一个元素的同级元素

    js进阶 11-17 juqery如何查找一个元素的同级元素 一.总结 一句话总结:三个方法,向前(prev()),向后(next())和兄弟(siblings()),而前面两个每个都对应三个,pre ...

  5. dmalloc arm-linux平台使用

    话说“工欲善其事,必先得其器”,用C语言写程序,最怕遇到个什么内存泄漏,内存越界访问了,心里那个急啊... 如果在i368-linlux上,valgrind工具是首选,但在arm-linux平台上,如 ...

  6. acdream 1430 SETI 后缀数组+height分组

    这题昨天比赛的时候逗了,后缀想不出来,由于n^2的T了,就没往后缀数组想--并且之后解题的人又说用二分套二分来做.然后就更不会了-- 刚才看了题解,唉--原来题讲解n^2的也能够过,然后就--这样了! ...

  7. Uncaught SyntaxError: Invalid regular expression flags(看页面源代码)

    Uncaught SyntaxError: Invalid regular expression flags(看页面源代码) 一.总结 js或者jquery方面的错误看页面源代码,一下子错误就很清晰了 ...

  8. HTML Email 编写指南(转)

      作者: 阮一峰 日期: 2013年6月16日 今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周 ...

  9. [Angular] ChangeDetection -- onPush

    To understand how change detection can help us improve the proference, we need to understand when it ...

  10. 关于android 怎样安装 assets文件下的apk

    在自己的app中安装assets文件夹下的apk文件 public class MainActivity extends Activity { Context mContext; @Override ...