SiteMesh介绍 (转)

| No Comments | No TrackBacks

以前我通常使用旧式的方法来建立自己的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对页面处理情况


现在看一个简单的例子。







Hello World!

<!--1+1-->


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


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


<!--taglib uri="sitemesh-decorator"<br  />prefix="decorator"-->









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




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


Hello World!

<!--1+1-->


 

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


<!--taglib uri="sitemesh-decorator" prefix="decorator"-->










default="staff@example.com" />">
default="staff@example.com" />





(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


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

No TrackBacks

TrackBack URL: http://www.wujianrong.com/mt-tb.cgi/2821

Leave a comment

About this Entry

This page contains a single entry by kevinwu published on July 10, 2007 7:41 PM.

在eclipse修改maven2资源目录 was the previous entry in this blog.

用sitemesh控制页面布局(转) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.