SiteMesh

简介: SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的 工作原理编辑 SiteMesh是基于Servlet的filter的,即过滤流。

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

工作原理编辑
SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取response,并进行装饰后再交付给客户。
其中涉及到两个名词: 装饰页面(decorator page)和 “被装饰页面(Content page)” , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一致的页面,并返回给客户
sitemesh运行环境需要:servlet, JDK 。

装饰页面(decorator page)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<!--[if IE 8]> <html lang="zh-cn" class="ie8 no-js"> <![endif]-->
<!--[if IE 9]> <html lang="zh-cn" class="ie9 no-js"> <![endif]-->
<!--[if !IE]><!-->
<html lang="zh-cn" class="no-js">
<!--<![endif]-->
<!-- BEGIN HEAD -->
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>xxx<sitemesh:title/></title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
    <meta content="" name="description"/>
    <meta content="" name="author"/>
    <!-- BEGIN GLOBAL MANDATORY STYLES -->

</head>
<!-- END HEAD -->
<!-- BEGIN BODY -->
<body class="page-header-fixed ">
<%@ include file="/WEB-INF/layouts/header.jsp" %>
<div class="clearfix"></div>
<!-- BEGIN CONTAINER -->
<div class="page-container">
    <%@ include file="/WEB-INF/layouts/sidebar.jsp" %>
    <!-- BEGIN CONTENT -->
    <div class="page-content-wrapper">
        <div class="page-content">
            <sitemesh:body/>
        </div>
    </div>
    <!-- END CONTENT -->



</div>

<%@ include file="/WEB-INF/layouts/footer.jsp" %>



<sitemesh:getProperty property="page.script"/>
<!-- END JAVASCRIPTS -->
</body>
<!-- END BODY -->
</html>

被装饰页面(Content page)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试页面</title>
<meta name="author" content="鰟鮍鱼" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>

<body>
    111
    <div>${username}</div>
    <div>${rc.contextPath}</div>
      ${(message)!}



</body>
</html>

classpath目录下decorator.xml

<?xml version="1.0" encoding="utf-8"?>
<decorators defaultdir="/decorators">
    <!-- 此处用来定义不需要过滤的页面 -->
    <excludes>
    </excludes>

 <!-- 用来定义装饰器要过滤的页面 -->
    <decorator name="main" page="main.jsp">
        <pattern>/*</pattern>
    </decorator>
</decorators>

web.xml配置 filter

    <!-- SiteMesh Web-Page Layout filter -->
    <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>

sitemesh 标签

引入标签

<%@ taglib prefix="sitemesh" uri="http://www.opensymphony.com/sitemesh/decorator" %>

我们看一下装饰模板中可以使用的Sitemesh标签

取出被装饰页面的head标签中的内容。

取出被装饰页面的body标签中的内容。

取出被装饰页面的title标签中的内容。default为默认值

取出被装饰页面相关标签的属性值。

decorator.xml命名

配置decorators.xml(必须有),sitemesh.xml(可选,但最好配置)

配置相关的XML文件。
在你项目的/WebRoot/WEB-INF/目录下新建一个decorators.xml和一个sitemesh.xml的空的XML文件。
在decorators.xml中这样配置:
<?xml version="1.0" encoding="UTF-8"?>
<!--* defaultdir: 包含装饰器页面的目录
    * page : 页面文件名
    * name : 别名
    * role : 角色,用于安全
    * webapp : 可以另外指定此文件存放目录
    * Patterns : 匹配的路径,可以用*,那些被访问的页面需要被装饰。 
 --> 
<decorators defaultdir="/decorators">
 <!-- 用来定义不需要过滤的页面 -->  
 <excludes>
 <!-- 过滤掉load进的页面 --> 
  <pattern>/page/lesquare/specialties/special_java.jsp</pattern>
  <pattern>/page/lesquare/specialties/special_.net.jsp</pattern>
 </excludes>
 <!-- 用来定义装饰器要过滤的页面 -->  
 <decorator name="siteMesh" page="siteMesh.jsp">
  <pattern >/*</pattern>
 </decorator>
</decorators>

在sitemesh.xml可以这样配置:
<?xml version="1.0" encoding="UTF-8"?>
<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.HTMLPageParser" />
        <parser content-type="text/html;charset=UTF-8"
            class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
    </page-parsers>

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

开发步骤

1、引入jar包

<!-- https://mvnrepository.com/artifact/opensymphony/sitemesh -->
        <dependency>
            <groupId>opensymphony</groupId>
            <artifactId>sitemesh</artifactId>
            <version>2.4.2</version>
        </dependency>

2、配置过滤器 web.xml

<!-- SiteMesh Web-Page Layout filter -->
    <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>

3 、配置decorator.xml

4、写装修页

5、写被装修页

相关文章
|
5月前
|
开发框架 Java .NET
Sitemesh3使用及配置
Sitemesh3使用及配置
|
6月前
|
Java Spring
15dwr - DWR 与 Spring整合
15dwr - DWR 与 Spring整合
26 0
|
6月前
|
Java PHP
17dwr - DWR 与 Struts整合
17dwr - DWR 与 Struts整合
15 0
|
5月前
|
开发框架 Java .NET
SiteMesh JSP布局框架介绍
SiteMesh JSP布局框架介绍
|
6月前
|
前端开发 JavaScript Java
20dwr - DWR 与 WebWork整合
20dwr - DWR 与 WebWork整合
21 0
|
Java 数据安全/隐私保护 JavaScript
struts2 常用标签总结
最近在用 Struts2 框架做项目,所以收集了一些 Struts2 的常用标签。
3384 0
|
XML Java 数据格式

热门文章

最新文章