sitemesh解决多页面共享内容问题
最近在制作一个小项目,因为存在后续交于其他同学进行补充完善的环节,关于一些公共页面模块的使用不想在每次都导入相同的js或者css等内容,查询了一下发现可以使用sitemesh来实现。
什么是sitemesh
百度词条的解释是:SiteMesh是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。
它能通过创建一个包装对象,也就是装饰来包裹的对象。尽管它是由Java语言来实现的,但是它能与其他Web应用很好的集成。
词条已经解释了什么是SiteMesh以及可以用它解决什么问题还有实现语言是什么。
sitemesh的具体使用
下面我们进入sitemesh的具体使用环节,以maven管理的web项目为例
1首先是引入相关的jar
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>2.4.1</version>
</dependency>
2然后在项目的web.xml中加入相关配置
<!--现在加入页面配置模板 SiteMeshFilter*****************************begin*************************************-->
<!--SiteMeshFilter-->
<filter>
<filter-name>sitemeshFilter</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemeshFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--现在加入页面配置模板 SiteMeshFilter*****************************end*************************************-->
3项目的web.xml同级目录下新建decorators.xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!--路径-->
<decorators defaultdir="/WEB-INF/layouts/">
<!-- 配置的名称以及对应的文件-->
<decorator name="main" page="main.jsp">
<!--需要修饰的-->
<pattern>/*</pattern>
</decorator>
<!--pattern中是action不是jsp页面-->
<excludes>
<pattern>/css/*</pattern>
<pattern>/data/*</pattern>
<pattern>/images/*</pattern>
<pattern>/scripts/*</pattern>
<pattern>/error/*</pattern>
<pattern>/file/upload*</pattern>
<pattern>/file/syncupload*</pattern>
<pattern>/file/download*</pattern>
<pattern>/file/downtemplate*</pattern>
<pattern>/wechat/*</pattern>
<pattern>/file/refund/*</pattern>
</excludes>
</decorators>
4设置你的通用模块页面
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<title><sitemesh:title/></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"/>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta charset="UTF-8">
<%--这里是我想给每个页面引入的通用js--%>
<script src="${ctx}/scripts/boot.js" type="text/javascript"></script>
<sitemesh:head/>
<style type="text/css">
html, body{
margin:0;padding:0;border:0;width:100%;height:100%;overflow:hidden;
}
a{
color: #005aa0;
text-decoration: none;
}
.description h3 {
color: #CC0000;
font-size: 14px;
margin: 0 0px 10px 0px;
padding: 5px 0 5px;
border-bottom: solid 1px #888;
}
</style>
</head>
<body>
<sitemesh:body/>
</body>
<script type="text/javascript">
if(window.parent.hideMenu) {
$("body").bind("mousedown", window.parent.hideMenu);
}
</script>
</html>
sitemesh使用后记
sitemesh对于一个web项目个人认为是非常必要的。开发最简单的方式就是直接使用前人做好的东西。而且很多功能可能是所有的页面都要使用的功能,那么为了减少冗余使用sitemesh就非常舒服了。
当一个新同学拿到的一个老项目,要去做自己的页面的时候,对于一些此项目通用的方法他也能拿来使用而不用去关心具体的实现那不香么。如果没有使用sitemesh每个页面单独引入自己要使用的东西,那么对于一个不熟悉项目的新同学可能要完成最初的几个页面是比较耗费时间的。
就像你来到了美丽的巴厘岛圣泉寺,作为一个外来旅游之人,不熟悉这里的风俗文化,那么可能会造成很多不必要的麻烦,而且也会使自己的心情大受干扰。那么圣泉寺有什么风俗文化呢,可能对于灵长类雄性没啥大碍,但是对于21世纪的灵长类雌性个体来说可能不太友好的一条规定就是,不能露出那修长的下肢。所以必须使用一条围裙包裹住裸露出来的部分下肢才能进寺摩拜(单车)。假如您没带或者没有提前准备,那不好意思了,这里衣冠不整不允许入内(打个领带或者穿个紧身衣?)。您可能需要自己出资去买一条围裙或者下次再来。但是,这些都不是问题,寺庙为您准备了免费的围裙,您入寺时可以围上,当您膜拜结束,出来时再归还。这样浪费您的时间和心情,也不浪费您那颗膜拜的心。而sitemesh就类似这里免费围裙,所以,您准备好进寺膜拜了么?那么围上您的sitemesh吧。