简化网站开发:SiteMesh小工具
在一个站点的制备,几乎所有的页面将具有相同的部分。导航栏例如,顶,每一页都是一样的,在底部的版权声明,每一页还都是一样的。
因此,在顶部导航栏的准备。第一种方法是直接复制的所有导航栏的代码,这种方法是在发育早期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小工具的更多相关文章
- C# JSON使用过程中开发的小工具
我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...
- 简化bigdecimal计算的小工具类
简化bigdecimal计算的小工具类 如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果( ...
- WordPress 网站开发“微信小程序“实战(二)
原文链接:https://devework.com/wordpres...,转载请用明链注明来源,谢谢! 本文是"WordPress 开发微信小程序"系列的第二篇,本文记录的是开发 ...
- WordPress 网站开发“微信小程序“实战(三)
本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...
- ANDROID开发实用小工具
分享一些 Android开发中的实用小工具,你有发现好工具吗? 来这里分享一下呗 一.find bugs 静态检查工具 http://findbugs.sourceforge.net/ FindBug ...
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...
- ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...
- CodeMixerPro工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...
- CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...
随机推荐
- Objective-C中 ==、isEqual、isEqualToString判断字符串相等
图片发自简书App 在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码 if (activityType == @"0"){} //activityType是某一 ...
- TF-IDF计算方法和基于图迭代的TextRank
文本处理方法概述 说明:本篇以实践为主,理论部分会尽量给出参考链接 摘要: 1.分词 2.关键词提取 3.主题模型(LDA/TWE) 4.词的两种表现形式(词袋模型和分布式词向量) 5.关于文本的特征 ...
- crx
https://www.crx4chrome.com/down/770/crx/ Downloading crx file for Linkclump The Linkclump crx file y ...
- php实现 句子逆序(需求才是最好的老师)
php实现 句子逆序(需求才是最好的老师) 一.总结 一句话总结:需求才是最好的老师. 1.str_split()和explode()的区别? explode — 使用一个字符串分割另一个字符串 3 ...
- 贝勒爷教你怎样在Mac上安装Microsoft Office
1.亲,鼠标双击该安装文件: 2.非常好,你将会看到这样一个东东(假设没有看到那就不要来见我了): 3.不错,再次双击红色区域,假设出现下面提示,别怕哈: 4.点击"好"butto ...
- 【t082】牛跑步
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新牛到部队,CG要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上 ...
- Using Eredis, Redis With Erlang
http://no-fucking-idea.com/blog/2012/03/23/using-eredis-in-erlang/ Using Eredis, Redis With Erlang M ...
- Git远程操作具体解释
Git是眼下最流行的版本号管理系统,学会Git差点儿成了开发人员的必备技能. Git有非常多优势,当中之中的一个就是远程操作非常简便.本文具体介绍5个Git命令,它们的概念和使用方法,理解了这些内容. ...
- NOIP 模拟 box - 费用流 / 匈牙利
题目大意: 给出n(\(\le 200\))个盒子,第i个盒子长\(x_i\),宽\(y_i\),一个盒子可以放入长宽都大于等于它的盒子里,并且每个盒子里只能放入一个盒子(可以嵌套),嵌套的盒子的占地 ...
- C++动态数组简单的模拟二元堆
//C++动态数组简单的模拟二元堆 #include<iostream> using namespace std; class BinaryHeap { private: int cap; ...