(一)简介
OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,
能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。
(二)原理
SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取response,并进行装饰后再交付给客户。其中涉及到两个名词: 装饰页面(decorator page)和 "被装饰页面(Content page)" , 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一致的页面,并返回给客户
(三)与freemarker的比较:
用sitemesh 的话。你的某个action生成的页面,只要是局部就可以。比如生成一个数据
显示的table,外面的html, header, footer这些都交给sitemesh 去装饰了;
如果用freemarker的话。你的某个action生成的页面需要关注的是整个html,
只是你把header, footer, sidebar 这些抽取出来了而已
(四)使用步骤: 把握几个要点:jar, 过滤器配置,装饰器描述文件(decorators.xml),模板文件,标签引入, 测试页面
1. 下载并导入jar包:sitemesh-2.4.2.jar
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<decorators>
<!-- 不需要过滤的请求 -->
<excludes>
<pattern>/static/*</pattern>
<pattern>/remote/*</pattern>
</excludes>
<!-- 定义装饰器要过滤的页面 -->
<decorator name="default" page="/decorators/default.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
如上,定义了一个叫default的装饰器,对应的模板文件在web-root的decorators目录下,叫做default.jsp、
1)一个decorator 节点定义了一个装饰器,通过pattern指定要拦截的URL
2)excludes节点指定要排除的URL
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="sitemesh"
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>SiteMesh示例主页面-<sitemesh:title /></title>
<sitemesh:head />
</head>
<body>
<%@ include file="header.jsp"%>
<div id="content">
<sitemesh:body />
</div>
<%@ include file="footer.jsp"%>
</body>
</html>
sitemesh中常用的三种标签
<前缀:title>:插入原始页面(被包装页面)的title标签中的内容,还可以添加一个缺省值
<前缀:head>:插入原始页面(被包装页面)的head标签中的内容(不包括head标签本身)。
<前缀:body>:插入原始页面(被包装页面)的body标签中的内容
1)webroot中创建一个index页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sitemesh测试</title>
</head>
<body>
我的第一个JFinal程序
</body>
</html>
2)webroot下的static目录也创建一个index页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>有人拦截我吗?</title>
</head>
<body>
有人拦截我吗?
</body>
</html>
1)访问webroot中的测试页面index.jsp,sitemesh过滤器会为index.jsp自动插入header和footer部分(当然访问其他页面也一样,只要被拦截)
2)访问static下的index.jsp,发现只有Index页面本身的部分,header和footer不会插入,因为在decorators.xml中被过滤了
相关推荐
SiteMesh 是一个开源的网页布局框架,用于Java Web应用程序,其主要目的是解决页面布局和装饰的问题。通过使用Decorator模式,...通过学习和熟练运用SiteMesh,你可以更轻松地构建具有专业外观和一致性的Web应用。
这个demo是基于博主的**Sitemesh入门和使用笔记**,提供了对应的源码供学习者实践和参考。以下是关于Sitemesh的详细讲解: 1. **安装与配置** - 首先,你需要将Sitemesh的JAR文件添加到你的项目类路径中。这可以...
SiteMesh 是一个强大的网页布局和装饰框架,它的主要目的是为了分离网页的内容(content)和页面结构...通过学习和熟练使用SiteMesh,开发者可以更好地组织和管理页面结构,提升用户体验,同时降低维护成本。
【描述】提及了“appfuse,xdoclet上网收集的一些资料打包”,这表明这个压缩包可能包含了从互联网上搜集到的关于AppFuse和XDoclet的各类信息和学习材料。 AppFuse是一个开源项目,它提供了一个快速开发Java Web应用...
通过阅读`freemarker语法.docx`和`freemarker笔记1.txt`,你可以更深入地了解这些规则,并结合实际项目进一步掌握Freemarker的使用。同时,参考提供的博客链接(https://kingpingping.iteye.com/blog/1144477),...
#### 第1章:Struts是否已经过时? - **1.1 Struts的历史发展过程** Struts框架是伴随着Java Web技术的发展而诞生的一个MVC(Model-View-Controller)架构的实现。最初版本的Struts发布于2000年左右,它极大地...