什么是SiteMesh?
SiteMesh是OpenSymphony下的一个项目,是基于PageFilter,Servlet过滤器的通用组件.
SiteMesh为我们带来什么?
我們可以想像一下,当我们的应用程序有大量的页面时候,为每个页面include我们各种各样的标签库,引入的js和css等样式,这将会成为重复性的工作,而且只要其中一个标签库进行了更新升级,所有页面的标签声明都需要重新更改,这项工作无疑是恐怖而且毫无技术含量的,SiteMesh就是为了帮助我们解决这个问题,把共有的标签例如js,css,struts-tags等重复性的声明抽象到一个页面当中,从而实现集中处理,增加维护性和解除页面间的耦合.
SiteMesh原理:
SiteMesh应用了Decorator模式,用filter截取request和response,把页面组件head,content,banner结合为一个完整的视图。通常我们都是用include标签在每个jsp页面中来不断的包含各种header, stylesheet, scripts and footer,现在,在SiteMesh的帮助下,我們可以不再编写那些重复性的代码,从而集中在一个地方进行管理.容器接收到页面请求时,会把请求传递给PageFilter,PageFilter收集应用程序的响应细节,生成自定义的响应对象,然后连同请求一起传递给web应用程序.web应用程序把响应资源写入到自定义响应对象里,再返回给PageFilter.
SiteMesh使用:
本事例使用基于Struts2来进行编写
1.首先在我们的项目当中添加Maven的依赖
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>2.4.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitemesh-plugin</artifactId>
<version>2.2.3</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
2.在web.xml文件中增加如下配置
<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>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
3.在WEB-INF建立decorators.xml,该文件描述各个装饰器页面和如何过滤页面
<?xml version="1.0" encoding="UTF-8"?>
<!-- defaultdir 属性为通用页面存放的路径 -->
<decorators defaultdir="/WEB-INF/content/base">
<!-- excludes 为哪些页面不需要进行装饰,这通常结合popup来使用 -->
<excludes>
<pattern>*no-decorate*</pattern>
<pattern>/login*</pattern>
</excludes>
<!-- decorator为指定装饰页面的名称和路径 -->
<decorator name="main" page="main.jsp">
<!-- pattern 为要过滤哪些页面? * 代表所有页面都进行过滤-->
<pattern>*</pattern>
</decorator>
<decorator name="printable" page="printable.jsp"/>
</decorators>
以下为main.jsp代码
<!--
当使用了SiteMesh后,本页面main.jsp就会变成所有页面的模板
我们可以在这个页面中引入各种的css,js和其他的页面,
亦可以在这里使用jsp的include标签引入其他的页面,
更甚者可以在这里设定全局的js,例如jQuery的$.(document).ajaxStart(function(){})
-->
<html>
<head>
<!-- decorator:title可以将被过滤的页面的title填充到这里 -->
<title><decorator:title/></title>
<!-- decorator:head 可以将被过滤的页面中的head填充到这里 -->
<decorator:head />
</head>
<body>
<div class="content">
<!-- decorator:head 可以将被过滤的页面中的body填充到这里 -->
<decorator:body />
</div>
总结:
使用了SiteMesh后,更集中的管理了各個頁面的标签,css,js的引入,虽然在实际开发当中一般会首先固定各个技术使用的版本,但由于需求的变更和技术的更新发展,有时候不得不更新所使用的版本,大量分散在不同页面的引入标签修改起来简直就是噩梦般的事情,而且SiteMesh的简单易用,我们何乐而不为的去使用SiteMesh呢?
分享到:
相关推荐
sitemesh 使用例子。 <?xml version="1.0" encoding="utf-8"?> <decorators defaultdir="/decorators"> <!-- 此处用来定义不需要过滤的页面 --> <excludes> </excludes> <!-- 用来定义装饰器要过滤的...
如果需要对某些特定页面不应用装饰,或者只对特定部分进行装饰,可以使用 `excludes` 和 `includes` 属性在 `web.xml` 中配置 SiteMesh 过滤器。 9. **优化与性能** SiteMesh 通常对性能的影响很小,但可以通过...
### Sitemesh使用示例 在提供的压缩包文件中,有多个HTML和JSP文件,它们可能是Sitemesh的使用示例: - **index.html**:通常作为网站的主页,可能展示了Sitemesh如何应用全局布局。 - **badsource.html**、**...
接下来是"siteMesh使用文档"。这份文档通常会涵盖以下几个关键知识点: 1. **安装SiteMesh**:这通常包括下载SiteMesh的库文件,将其添加到你的项目构建路径中(例如,如果你使用Maven,可以在pom.xml中添加对应的...
3. **创建装饰模板**:Sitemesh使用HTML文件作为装饰模板,你可以根据需求创建一个基础模板,例如`layout.html`,该模板通常包含页头、页脚、侧边栏等公共部分。 4. **设置页面内容**:对于每个需要装饰的页面,...
3. **创建装饰模板**:Sitemesh 使用一个名为 `decorators` 的目录来存储装饰模板。这些模板定义了页面的通用结构,如头部、底部和侧边栏。例如,你可以创建一个 `default.jsp` 文件,其中包含你的页面布局。 4. **...
- **更强大的过滤器**:在Servlet容器中,Sitemesh 使用过滤器拦截请求和响应,增强了对页面装饰的控制。 - **API改进**:提供了更为简洁、易于使用的API,便于开发者进行定制和扩展。 - **性能优化**:相比之前的...
3. **Sitemesh使用步骤** - **安装与导入**:下载Sitemesh库并将其加入到项目依赖中。 - **配置web.xml**:设置Sitemesh Filter,包括装饰器的配置和默认装饰器的选择。 - **创建装饰器模板**:设计HTML模板,...
通过这个简单的 demo,你可以学习到如何在实际项目中集成和使用 Sitemesh,以提高网站的整体一致性和美观性。同时,Sitemesh 还支持自定义装饰策略、多装饰器应用、动态装饰等功能,可以根据项目需求进行深入研究和...
SiteMesh 是一个开源的 J2EE 页面布局和装饰框架,主要用来解决Web应用程序中的内容与表现层分离的问题。它的设计灵感来源于设计模式中...通过合理地使用SiteMesh,你可以创建出既具有统一风格,又易于维护的Web应用。
3. **使用Spring MVC或Struts2**:如果项目使用了Spring MVC或Struts2等框架,Sitemesh有对应的整合方式,可以更方便地实现页面装饰。 4. **处理Ajax请求**:Sitemesh默认不处理Ajax请求,但可以通过自定义Filter或...
8. **文档和实例**:在提供的资料中,文档将详细介绍如何安装、配置和使用SiteMesh 2.3,实例则可以帮助初学者快速理解和上手实践。 9. **依赖库(Lib)**:SiteMesh 2.3 包含了运行所需的库文件,确保了在各种环境...
Sitemesh使用`<decorator>`标签来定义装饰器,以及`<include>`标签来插入页面内容。 **Struts2 Sitemesh插件** `struts2-sitemesh-plugin-2.2.1.1.jar`是Struts2与Sitemesh集成的关键组件。它使得Struts2应用可以...
- 在需要装饰的页面上,可以使用特殊的注释(例如 `<@sitemesh.page>`)来指定页面内容应插入到布局的哪个部分。 - SiteMesh 提供了一些自定义选项,比如通过 `decorators.xml` 文件来指定哪些页面使用哪种布局,...
在 `sitemesh-2.3.zip` 文件中,包含了该框架的源码、文档、构建文件以及库文件,便于我们了解和使用 Sitemesh。 1. **构建文件** - `build.properties`: 这是一个属性文件,包含了构建过程中的配置参数,如版本...
2. **过滤器机制**:Sitemesh使用Servlet过滤器来拦截HTTP请求,对响应内容进行处理。当用户请求一个页面时,Sitemesh过滤器会捕获这个请求,然后应用装饰模板。 3. **模板语言**:Sitemesh支持多种模板语言,包括...
7. **API 使用**:在 `sitemesh-2.4.1.jar` 文件中,包含了 SiteMesh 的核心 API,开发者可以通过编程方式控制 SiteMesh 的行为,如手动触发装饰过程或获取当前装饰状态。 8. **文档与示例**:通常,完整的 ...
**Sitemesh使用** 1. **标记可装饰页面**:在要装饰的JSP或HTML页面中,使用`<@sitemesh.page>`指令标签来标记页面,让Sitemesh知道这个页面需要被装饰。 2. **自定义装饰规则**:可以通过配置文件(通常为`...
SiteMesh 使用装饰器(Decorator)模式来实现其功能。装饰器模式允许在不修改原有对象的情况下,为对象添加新的行为或属性。在 SiteMesh 中,装饰器页面是包含页面布局和通用元素的模板,比如页头、页脚和侧边栏。当...
通过使用 SiteMesh,可以将页面的头部、底部、侧边栏等公共部分抽取出来,作为模板,然后在每个页面中应用这个模板,从而保持网站的整体风格一致。SiteMesh 使用过滤器(Filter)来拦截HTTP请求和响应,将页面内容与...