`

SiteMesh介绍

阅读更多

SiteMesh介绍 (转)

作者:by Will Iverson 03/11/2004
汉化:by AndNeT 03/24/2005

注:sitemesh,一个不错的tiles替代方案,比tiles做的更漂亮优雅。本文是sitemesh官方推荐的入门文档,本来想自己翻译的,突然发现有人先行一步了,就转过来看吧。


以前我通常使用旧式的方法来建立自己的web应用:手工排版,仔细使用每一个字节使其工作在Unicode下,同时使用make文件来适应不同的CPU……

或许现在我们可以换一种方式。

尽管我从没有感觉到需要使用assembly (CISC or RISC)来建立web应用,但也会偶尔觉得我的开发伙伴的工作相当繁琐。特别是我发现很多的开发者在痛苦的寻求一种比较好的方式来控制web应用的基本 模块:例如那些页头、页尾、导航栏、打印页面、手持设备的轻量级页面,以及其他更多的问题。到了最后,令人惊异的是大部分人都采用了落后的 includes和复制粘贴方式。

根据经验,我可以采用在 java.net 上开源的servlet 过滤器 SiteMeshn 来简单明了并优雅的解决这些问题。作为一种替代新的templating语言(XSLT)或部署您的页面到新的系统的解决方法,应用SiteMesh可以 相当容易处理你的页面,这一切只需要普通的HTML,JSP,servlet(包括Struts),以及其他常用的技术。

工作原理

SiteMesh利用了一种很少人知道的servlet规范实现了一种页面过滤器。设想一下,现在有一个简单的jsp页面用来返回当前的日期和时 间。通常这个页面请求来到应用服务器,页面被处理,最后处理结果返回到web浏览器。SiteMesh作为一个页面过滤器,在页面被处理之后,返回web 浏览器之前,对页面做了一些附加的操作。这个变化简单描述为图一和图二所示的附加步骤。


图一:普通页面处理情况


图二:SiteMesh对页面处理情况

现在看一个简单的例子。

<html></html>
<head></head>



Hello World!

<!---->

你会发现这个页面有一个title和body(类似普通的HTML页面)。你也会发现一小段JSP代码——它将会如同你期望的那样被处理。同时你可以使用任何你想使用的JSP语法和特性来替换这一小段代码。

现在来看一个简单的SiteMesh "装饰(decorator)"页面。列表2显示了一个被SiteMesh调用的JSP页面。

<!---->
<html></html>
<head></head>

<decorator:head></decorator:head>


<decorator:title default="Welcome!"></decorator:title>


<decorator:body></decorator:body>



( href="http://www.zhmy.com/?printable=true" _fcksavedurl="http://www.zhmy.com/?printable=true">printable version



查看这个装饰器(decorator),我们能看到一些有趣的东西。首先,在第一行申明了一个SiteMesh标签库。这个标签库包含了与原始页面一起工作时所需的所有东西。你能看到我们使用了两个SiteMesh的装饰标签(declared tags), <decorator:title></decorator:title> 和 <decorator:body></decorator:body>。不要惊讶于标签<decorator:title>在</decorator:title>原始页面中显示


Hello World!

<!---->

 

我们定义一个“smart”装饰器来研究meta标签,如果出现这个标签,则可以得到一个相应的HTML:

<!---->
<decorator:usepage id="myPage"></decorator:usepage>
<html></html>
<head></head>

<decorator:head></decorator:head>



<decorator:title default="Welcome!"></decorator:title>



default="staff@example.com" />">
<decorator:getproperty property="meta.author"></decorator:getproperty> default="staff@example.com" />



<decorator:body></decorator:body>


(printable version



可以看到我们使用了getProperty标签的一个默认属性——如果没有指定 author,我们就设定其为staff。如果你决定使用这个模型储存页面的meta数据,你或许需要和你的开发伙伴一起来确定将使用什么标签以及如何使 用他们。简单的,你或许想要使用meta标签来描述诸如页面作者及时间戳之类的东西。更复杂一些,你或许会想像XML文件一样标准化的管理你的站点导航, 同时使用meta标签来通过页面节点转到装饰器。(At the complex end, you may do things like standardize on an XML file to manage your site navigation and use a meta tag to pass the page's node to the decorator. )

图六显示了应用上面的装饰器JSP页面之后生成的结果。


图六:meta标签显示

这些页面属性非常强大,并且拥有着很多不同的特性,并不仅止于meta标签( 常用页面特性列表)。使用SiteMesh一段时间之后,你就会开始思考HTML和JSP作为一种简单标记语言的机制——接近最原始的HTML——无需操作就可以完整的切换到XML/XSL 或其他模版引擎。

小结

综上所述,SiteMesh 提供了一个强大、易用、易结合的机制来使用页面模版。可以想象,它将会有很广泛的用户群。例如,你可以定义一个装饰器针对不同的浏览器输出额外的页面调试 信息(和特定web浏览器结合之后将产生一个特别的功能,你可以强制指定使用某一种用户代理)。你也可以定义一个装饰器产生stripped-down XML输出,用来进行简单的自动化测试。你甚至可以使用装饰器从其他页面提取内容,例如输出到一些简单的门户容器。

sitemesh-blank.war入手比较容易,但我建议学习 sitemesh-example.war 以获取更多的特性和思想。

不论你如何使用SiteMesh,我都发现它将大量的代码从表现层中移到我的装饰器中,而无需学习一种新的编程语言或是模版系统。

对了,作为最后的补充,如果你仍然对组合建立web页面感兴趣,可以查看home.worldonline.dk/viksoe/asmil.htm

祝好运并享受编程的乐趣!

分享到:
评论
1 楼 jiake0504 2007-11-21  
谢谢 

相关推荐

Global site tag (gtag.js) - Google Analytics