20.2 单独使用SiteMesh
20.2.1SiteMesh下载
需要到OpenSymphony的官网http://www. opensymphony.com/sitemesh/download.action下载相关的资源,现在SiteMesh的最新版本是2.4.1,下载的时候有四种选择:
- JAR:仅仅下载SiteMesh的jar包。
- Full:下载SiteMesh的全部内容,包括源代码、文档、依赖包。
- Blank app:下载SiteMesh项目的一个空项目。
- Example app:下载SiteMesh的示例项目。
只需要下载其中的Full和Blank app就可以开始学习了。
下载Full,得到的文件名为sitemesh-2.4.1.zip,其中包含三个文件夹:
- doc:SiteMesh框架的文档。
- lib:SiteMesh依赖的所有jar包。
- src:SiteMesh的所有源文件。
下载Blank app,得到的文件名为sitemesh-blank.war,其实war文件也是压缩包,所以可以用直接用winrar打开,得到里面的重要内容。
- sitemesh-blank\WEB-INF\web.xml:里面包含了要引用SiteMesh所需要引用的过滤器。
- sitemesh-blank\WEB-INF\lib\sitemesh-2.4.1.jar:SiteMesh的jar包。
- sitemesh-blank\WEB-INF\lib下的sitemesh-decorator.tld和sitemesh-page.tld:这是SiteMesh定义模板页面是需要用到的两个自定义标签库。
- sitemesh-blank\WEB-INF\ decorators.xml:定义模板页面和被装饰页面如何结合。
20.2.2拷贝资源
先来单独使用SiteMesh,需要另外建立一个动态的Web工程,名称随意,比如叫做td。在新建的Web项目下,需要把下载的各种资源拷贝到位:
- 拷贝SiteMesh依赖的jar包,也就是sitemesh-2.4.1\lib包下所有的jar,到Web工程的构建路径下WebContent\WEB-INF\lib包下。
- 拷贝SiteMesh的jar包sitemesh-blank\WEB-INF\lib\sitemesh-2.4.1.jar,到Web工程的构建路径下WebContent\WEB-INF\lib包下。
- 拷贝SiteMesh的自定义标签,也就是sitemesh-blank\WEB-INF\lib包下所有的tld文件,到Web工程的WEB-INF\lib文件夹下。
- 拷贝SiteMesh的decorators.xml,在sitemesh-blank\WEB-INF包下,到Web工程的WEB-INF文件夹下。
20.2.3引用过滤器
拷贝完所有的资源,需要让我们的Web项目引用SiteMesh的过滤器。打开sitemesh-blank\WEB-INF\web.xml,拷贝出其中SiteMesh过滤器的定义部分和映射部分,示例如下:
java代码:
- <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>
把这部分内容拷贝入我们的Web工程的web.xml中。
20.2.4定义模板页面
现在来定义SiteMesh的模板页面,在这个页面里,把模板部分,比如页眉、页脚,直接用HTML代码定义好,需要被装饰页面指定的部分,用SiteMesh提供的自定义标签来定义。
把这个页面命名为main.jsp,在WebContent下面新建一个decorators文件夹,然后把main.jsp放置到这个文件夹下。注意,这个文件的名字和位置在将来模板页面和被装饰页面结合时非常重要。文件内容示例如下:
java代码:
- <%@ page contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <%@taglib prefix="decorator" uri="/WEB-INF/lib/sitemesh-decorator.tld" %>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>模板指定的标题--具体页面指定的标题(<decorator:title/>) </title>
- <decorator:head/>
- </head>
- <body>
- 模板页面指定的头部分
- <hr>
- <decorator:body/>
- <hr>
- 模板页面指定的脚部分
- </body>
- </html>
上面提到的使用SiteMesh的自定义标签就是:<decorator:title/>、<decorator:head/>和<decorator:body/>,这些都是等待被装饰页面填入的部分,其他的HTML代码就是我们写的模板页面部分。
其中:<decorator:title/>标签用来引用被装饰页面的标题,<decorator:head/>用来引用被装饰页面的头信息,<decorator:body/>用来引用被装饰页面的内容。
20.2.5定义被装饰页面
有了模板页面,接下来定义被装饰的页面。被装饰页面与普通的页面一模一样,根本没有任何区别,比如来写一个应用的首页,名称为index.jsp,里面并没有真的内容,仅仅显示一下,放置到WebContent下,示例如下:
java代码:
- <%@ page contentType="text/html; charset=gb2312" pageEncoding="gb2312"%>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>首页</title>
- </head>
- <body>
- 首页的内容
- </body>
- </html>
20.2.6合成模板页面与被装饰页面
接下来指定模板页面与被装饰页面的合成,打开拷贝过来的decorators.xml,里面的内容如下:
java代码:
- <?xml version="1.0" encoding="ISO-8859-1"?>
-
- <decorators defaultdir="/decorators">
- <decorator name="main" page="main.jsp">
- <pattern>/*</pattern>
- </decorator>
-
- <decorator name="panel" page="panel.jsp"/>
- <decorator name="printable" page="printable.jsp"/>
- </decorators>
- 这个xml的根元素是<decorators>元素,里面的每一个<decorator>元素都指定了一组模板页面与被装饰页面的关系。而<decorators>元素的defaultdir属性指明了在寻找模板页面的时候,从Web应用的/decorators路径下开始找,也就是WebContent/decorators。
- <decorator>元素的name属性只是为这个元素取一个名字,page属性指定了模板页面的名字。
- <decorator>元素的<pattern>子元素的值为/*,指明了这个Web应用中所有的页面都要会被加上这个模板页面。
为了示例的简单,直接把后面两组模板与被装饰页面关系删掉就可以了。并把xml的编码方式改为UTF-8,示例代码如下:
java代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <decorators defaultdir="/decorators">
- <decorator name="main" page="main.jsp">
- <pattern>/*</pattern>
- </decorator>
- </decorators>
测试运行一下,看看效果,访问:http://localhost:9080/td/index.jsp,会发现得到的结果就是模板页面+被装饰的页面,如下图所示:
图19.2 使用SiteMesh装饰页面的效果
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4179.html】
欢迎访问http://sishuok.com获取更多内容
分享到:
相关推荐
2. **配置Struts2**:在struts.xml配置文件中,添加SiteMesh插件的配置,使Struts2知道需要使用SiteMesh进行页面装饰: ```xml <constant name="struts.action.excludePattern" value="/decorator.*"/> ...
### Struts2整合SiteMesh技巧 #### 概述 在Web开发中,为了实现页面布局的统一性与可维护性,通常会采用一种称为“页面布局管理”的技术。Struts2框架提供了对SiteMesh的支持,这是一种强大的页面布局管理工具。...
Struts2、Spring2.5 和 SiteMesh 是Java Web开发中的三个重要框架,它们共同构建了一个强大且灵活的Web应用程序架构。在这个小DEMO中,我们将深入探讨这三个框架的集成和工作原理。 **Struts2** 是一个基于MVC...
`struts2-sitemesh-plugin-2.2.1.1.jar`是Struts2框架与Sitemesh集成的插件,使得Struts2应用能够利用Sitemesh的功能来美化和规范化页面布局。 **Struts2框架** Struts2的核心功能包括动作映射、结果处理、数据绑定...
要将Struts2和Sitemesh整合,我们需要两个关键的组件:Sitemesh框架本身(在这个例子中是版本2.4.2)和Struts2的Sitemesh插件(版本2.1.8)。这两个组件的集成使得Struts2能够自动将Sitemesh应用于其返回的页面,...
第10章 Struts 2的标签库,第11章 Struts 2的Ajax支持,第12章 使用FreeMarker充当表现层,第13章 整合Spring,第14章 整合JSF,第15章 整合SiteMesh,第16章 整合JasperReports,第17章 整合JFreeChart,第18章 ...
Struts2和Sitemesh是两个非常流行的Java Web开发框架,它们在构建高效、结构化的MVC(模型-视图-控制器)应用中起到关键作用。Struts2是一个基于MVC设计模式的开源框架,主要用于控制应用程序的流程,而Sitemesh则是...
struts2-sitemesh-plugin-2.0.8.jar
struts2-sitemesh-plugin-2.1.6.jar
而Struts2 SiteMesh 插件则使得整合 SiteMesh 和 Struts2 框架变得更加方便,让开发者可以充分利用 SiteMesh 的功能来提升用户体验。 首先,我们需要理解 Struts2 是一个基于 Model-View-Controller(MVC)设计模式...
struts2-2拦截器与SiteMeshstruts
Struts2+Spring+Hibernate+sitemesh做的一个在线音乐站点写的一个在线音乐 的站点.功能实现的相对比较粗糙(如歌曲列表没考虑分页什么的),另外只能使用IE(使用了ActiveX 控件播放音乐的).
通过深入研究这个源码,开发者可以学习到如何有效地使用Struts2、Sitemesh和FreeMarker来构建复杂的Web应用,理解它们的内部工作原理,以及如何优化和扩展这三个组件。这对于提升Java Web开发技能和理解MVC架构有极...
spring-boot-sitemesh 源码整合
5. 使用Sitemesh定义全局布局模板,并在Struts2配置中指定装饰器。 6. 编写业务逻辑,通过Struts2调用Spring管理的Service,由Service调用Hibernate管理的DAO,完成数据操作。 7. 运行项目,观察Sitemesh装饰效果...
将Struts2.0与Sitemesh整合,可以让Struts2处理业务逻辑,而Sitemesh负责页面的装饰和布局。这样,开发者可以专注于业务代码编写,而无需关心页面的样式细节。通常,整合步骤包括: 1. **添加依赖**:在项目中引入...
struts框架与sitemesh框架整合的插件,在java web开发中可以制作模板页,使自己做的网站看起来更专业
【标题】"个人测试用报表项目(sitemesh+struts2+birt)"涉及到的主要技术栈是Sitemesh、Struts2和BIRT,这是一个经典的Java Web开发组合,用于构建动态、数据丰富的报表系统。 Sitemesh是Java的一个开源页面布局...