﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-扭曲的铅笔-随笔分类-SiteMesh</title><link>http://www.blogjava.net/naruke/category/23270.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 25 Jul 2007 17:29:48 GMT</lastBuildDate><pubDate>Wed, 25 Jul 2007 17:29:48 GMT</pubDate><ttl>60</ttl><item><title>SiteMesh 过滤不装饰的页面</title><link>http://www.blogjava.net/naruke/archive/2007/07/25/132335.html</link><dc:creator>扭曲的铅笔</dc:creator><author>扭曲的铅笔</author><pubDate>Wed, 25 Jul 2007 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/naruke/archive/2007/07/25/132335.html</guid><wfw:comment>http://www.blogjava.net/naruke/comments/132335.html</wfw:comment><comments>http://www.blogjava.net/naruke/archive/2007/07/25/132335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/naruke/comments/commentRss/132335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/naruke/services/trackbacks/132335.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SiteMesh 过滤不装饰的页面所需要的设置&nbsp;&nbsp;<a href='http://www.blogjava.net/naruke/archive/2007/07/25/132335.html'>阅读全文</a><img src ="http://www.blogjava.net/naruke/aggbug/132335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/naruke/" target="_blank">扭曲的铅笔</a> 2007-07-25 16:25 <a href="http://www.blogjava.net/naruke/archive/2007/07/25/132335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SiteMesh编码</title><link>http://www.blogjava.net/naruke/archive/2007/06/11/123336.html</link><dc:creator>扭曲的铅笔</dc:creator><author>扭曲的铅笔</author><pubDate>Mon, 11 Jun 2007 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/naruke/archive/2007/06/11/123336.html</guid><wfw:comment>http://www.blogjava.net/naruke/comments/123336.html</wfw:comment><comments>http://www.blogjava.net/naruke/archive/2007/06/11/123336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/naruke/comments/commentRss/123336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/naruke/services/trackbacks/123336.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SiteMesh默认的编码为iso-8859-1，如果是中文编码可能会出现乱码问题。可以通过两种方法修改改编码&nbsp;&nbsp;<a href='http://www.blogjava.net/naruke/archive/2007/06/11/123336.html'>阅读全文</a><img src ="http://www.blogjava.net/naruke/aggbug/123336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/naruke/" target="_blank">扭曲的铅笔</a> 2007-06-11 11:19 <a href="http://www.blogjava.net/naruke/archive/2007/06/11/123336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SiteMesh常用标签简介</title><link>http://www.blogjava.net/naruke/archive/2007/06/11/123334.html</link><dc:creator>扭曲的铅笔</dc:creator><author>扭曲的铅笔</author><pubDate>Mon, 11 Jun 2007 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/naruke/archive/2007/06/11/123334.html</guid><wfw:comment>http://www.blogjava.net/naruke/comments/123334.html</wfw:comment><comments>http://www.blogjava.net/naruke/archive/2007/06/11/123334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/naruke/comments/commentRss/123334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/naruke/services/trackbacks/123334.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SiteMesh有两个标签库分别为sitemesh-decorator.tld、sitemesh-page.tld<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/naruke/archive/2007/06/11/123334.html'>阅读全文</a><img src ="http://www.blogjava.net/naruke/aggbug/123334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/naruke/" target="_blank">扭曲的铅笔</a> 2007-06-11 10:58 <a href="http://www.blogjava.net/naruke/archive/2007/06/11/123334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SiteMesh介绍（转）</title><link>http://www.blogjava.net/naruke/archive/2007/06/11/123313.html</link><dc:creator>扭曲的铅笔</dc:creator><author>扭曲的铅笔</author><pubDate>Mon, 11 Jun 2007 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/naruke/archive/2007/06/11/123313.html</guid><wfw:comment>http://www.blogjava.net/naruke/comments/123313.html</wfw:comment><comments>http://www.blogjava.net/naruke/archive/2007/06/11/123313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/naruke/comments/commentRss/123313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/naruke/services/trackbacks/123313.html</trackback:ping><description><![CDATA[<p>以前我通常使用旧式的方法来建立自己的web应用：手工排版，仔细使用每一个字节使其工作在<strong>Unicode</strong>下，同时使用make文件来适应不同的CPU&#8230;&#8230;</p>
<p>或许现在我们可以换一种方式。</p>
<p>尽管我从没有感觉到需要使用assembly (CISC or RISC)来建立web应用，但也会偶尔觉得我的开发伙伴的工作相当繁琐。特别是我发现很多的开发者在痛苦的寻求一种比较好的方式来控制web应用的基本模块：例如那些</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">页头<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>页尾<br></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>导航栏<br></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>打印页面<br></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>手持设备的轻量级页面</span> </div>
<p>以及其他更多的问题。到了最后，令人惊异的是大部分人都采用了落后的includes和复制粘贴方式。</p>
<p>根据经验，我可以采用在 java.net 上开源的servlet 过滤器 SiteMeshn来简单明了并优雅的解决这些问题。作为一种替代新的templating语言（XSLT）或部署您的页面到新的系统的解决方法，应用SiteMesh可以相当容易处理你的页面，这一切只需要普通的HTML，JSP，servlet(包括Struts)，以及其他常用的技术。</p>
<p><font color=#0000ff><strong>一 ：工作原理</strong> </font><br><br>SiteMesh利用了一种<font color=#0000ff>很少人知道的servlet规范</font>实现了一种页面过滤器。设想一下，现在有一个简单的jsp页面用来返回当前的日期和时间。通常这个页面请求来到应用服务器，页面被处理，最后处理结果返回到web浏览器。SiteMesh作为一个页面过滤器，在页面被处理之后，返回web浏览器之前，对页面做了一些附加的操作。这个变化简单描述为图一和图二所示的附加步骤。<br><br><img src="http://today.java.net/images/2004/03/sitemesh_fig1.gif"><br><br><img src="http://today.java.net/images/2004/03/sitemesh_fig2.gif"><br><br><font size=1><em>图二：SiteMesh对页面处理情况</em></font></p>
<p>现在看一个简单的例子。</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">html</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">head</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">title</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">Simple&nbsp;Document</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">title</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">head</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">body</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello&nbsp;World</span> <span style="COLOR: #000000">!</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">br&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;%=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000">1</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">%&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">body</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">html</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;</span> </div>
<p>你会发现这个页面有一个title和body（类似普通的HTML页面）。你也会发现一小段JSP代码——它将会如同你期望的那样被处理。同时你可以使用任何你想使用的JSP语法和特性来替换这一小段代码。 </p>
<p>现在来看一个简单的SiteMesh "装饰（decorator）"页面。列表2显示了一个被SiteMesh调用的JSP页面。</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&lt;%</span> <span style="COLOR: #000000">@&nbsp;taglib&nbsp;uri</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">sitemesh-decorator</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;prefix</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">%&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">html</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">head</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">title</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My&nbsp;Site&nbsp;</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">&nbsp;</span> <strong><span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator:title&nbsp;</span> <span style="COLOR: #0000ff">default</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Welcome!</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> </strong><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">title</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator:head&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">head</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">body</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">h1</span> <span style="COLOR: #000000">&gt; <strong>&lt;</strong></span> <strong><span style="COLOR: #000000">decorator:title&nbsp;</span> <span style="COLOR: #0000ff">default</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Welcome!</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> </strong><span style="COLOR: #000000"><strong>/&gt;</strong> &lt;/</span> <span style="COLOR: #000000">h1</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">p</span> <span style="COLOR: #000000">&gt; <strong>&lt;</strong></span> <strong><span style="COLOR: #000000">decorator:body&nbsp;</span> </strong><span style="COLOR: #000000"><strong>/&gt;</strong> &lt;/</span> <span style="COLOR: #000000">p</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">p</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">small</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span> <strong><span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">a&nbsp;href</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/?printable=true</span> </strong><span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">printable&nbsp;version</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">a</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">small</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">p</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">body</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">html</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;</span> </div>
<p>查看这个装饰器（decorator），我们能看到一些有趣的东西。首先，在第一行申明了一个SiteMesh标签库。这个标签库包含了与原始页面一起工作时所需的所有东西。你能看到我们使用了两个SiteMesh的装饰标签（declared tags）， </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span> <img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator:title</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator:body</span> <span style="COLOR: #000000">&gt;</span> </div>
<p>&nbsp;不要惊讶于标签&lt;decorator:title&gt;在原始页面中显示&lt;title&gt;标签中的内容， &lt;decorator:body&gt; 中的内容也是如此。我们在这个页面的HEAD和BODY元素都使用了同一个title标签,同时，我们还增加了一个到可打印版本页面的链接。</p>
<p>作为对照，图三显示了原始处理页面，图四显示了被修饰过的处理页面。留意被装饰页面在浏览器窗口显示的标题文字和HTML内容。同时也可以看到增加了一个可打印页面的链接——这个我们回头再说。 </p>
<p><img src="http://today.java.net/images/2004/03/sitemesh_fig3.gif"> <br><em><font size=1>图三：原始未修饰页面<br></font><br><img src="http://today.java.net/images/2004/03/sitemesh_fig4.gif"> <br></em><br><font size=1>图四：被修饰页面</font> </p>
<p>很明显，对比起使用include </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">例如</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">jsp:include&nbsp;page</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">foo.jsp</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;flush</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">true</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> </div>
<p>来说，以这样的方式使用页头、页尾系统结构要清晰得多。这种方式更易移植、更易理解，同时也鼓励了JSP页面不再使用导航或其他类似的表现层代码。我发现在JSP页面中使用装饰器和CSS的组合比标准HTML的标签更容易去除格式信息。</p>
<p><font color=#0000ff><strong>二 ： 安装SiteMesh</strong> </font><br><br>注意下面的屏幕截图是基于Windows XP Professional， Tomcat 5.0.19，和Java 2 SDK 1.4.2_03的环境之上的。在这里我假定你的Tomcat已经安装完毕并且可以正常工作了。你或许会有一些混淆，但我们已经成功地在Tomcat 4.1 和 WebLogic 测试过，同时 SiteMesh 也支持大部分的web应用服务器。 </p>
<p>本文描述的SiteMesh 2.0.1可以在 下载到。 在java.net 上SiteMesh's 的项目库中有四个文件可以下载。sitemesh-2.0.1.jar 是其核心 JAR 文件， sitemesh-2.0.1-sources.zip 的作用正如同其名字所述， sitemesh-example.war 则提供了一个复杂的例子用来显示一些SiteMesh的高级特性。</p>
<p>为了使描述更加简单，我们从sitemesh-blank.war 文件开始。将该WAR文件放入Tomcat 的webapps 目录，WAR包将自动解压显示内容（SoSo注：这里的前提是你的tomcat已经开始工作），如图五所示。</p>
<p><img src="http://today.java.net/images/2004/03/sitemesh_fig5.gif"> <br><br><em><font size=1>图五： SiteMesh_blank.WAR解开后的内容</font> </em></p>
<p>我们花点时间描述一下这些文件的作用。</p>
<p><strong>1&nbsp; :&nbsp; web.xml </strong></p>
<p>首先，<em>WEB-INF/web.xml</em> 文件显示如列表3，这些语句用来安装SiteMesh 过滤器和标签库。如果你决定在一个已有的Web应用中使用SiteMesh，你必须把这些语句添加到你的<em>WEB-INF/web.xml</em> 文件中。</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&lt;?</span> <span style="COLOR: #000000">xml&nbsp;version</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">1.0</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;encoding</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">ISO-8859-1</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">?&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;!</span> <span style="COLOR: #000000">DOCTYPE&nbsp;web</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">app&nbsp;PUBLIC&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">http://java.sun.com/dtd/web-app_2_3.dtd</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">web</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">app</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">name</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">name</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.filter.PageFilter</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">mapping</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">name</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">name</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;</strong></span> <strong><span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">url</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">pattern</span> <span style="COLOR: #000000">&gt;*</span> <span style="COLOR: #000000">.jsp</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">url</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">pattern</span> <span style="COLOR: #000000">&gt;</span> </strong><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">filter</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">mapping</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">uri</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">page</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">uri</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">location</span> <span style="COLOR: #000000">&gt;/</span> <span style="COLOR: #000000">WEB</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">INF</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">page.tld</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">location</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">uri</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">uri</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">location</span> <span style="COLOR: #000000">&gt;/</span> <span style="COLOR: #000000">WEB</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">INF</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">decorator.tld</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">location</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">taglib</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">web</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">app</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;</span> </div>
<p>注意：这里需要注意一下url-pattern的写法-- 如果使用的是Tomcat 5（而不是 Tomcat 4 ），需要将默认的*修改如*.jsp的形式。最新的servlet规范不再支持*样式。</p>
<p><strong>2 : decorators.xml</strong> </p>
<p><em>WEB-INF/decorators.xml</em> 文件用来将一个装饰器名字同一个专门的JSP装饰文件绑定</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorators&nbsp;defaultdir</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/decorators</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">main</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;page</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">main.jsp</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">pattern</span> <span style="COLOR: #000000">&gt;*&lt;/</span> <span style="COLOR: #000000">pattern</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">panel</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;page</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">panel.jsp</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">printable</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;page</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">printable.jsp</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">decorators</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000">&nbsp;</span> </div>
<p>正如我们在代码列表里看到的一样，我们定义了三个装饰器，他们分别绑定了三个类似的JSP页面。我们可以看到一个默认装饰器（main.jsp），它将被默认运用于所有文件。</p>
<p>2.1&nbsp; :&nbsp;&nbsp; 缺省的，SiteMesh使用下面的逻辑来选择使用哪一个装饰器：</p>
<p>&nbsp;</p>
<p>这个逻辑在<em>sitemesh-2.0.1.jar</em> 包的 <em>\com\opensymphony\module\sitemesh\factor\sitemesh-default.xml</em> 文件里被描述。<br><br><font size=1>sitemesh-default.xml&nbsp; : <br><br></font></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">property&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">decorators-file</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/WEB-INF/decorators.xml</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">excludes&nbsp;file</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">${decorators-file}</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">page</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">parsers</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">parser&nbsp;content</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">type</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">text/html</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.parser.FastPageParser</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">page</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">parsers</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">mappers</span> <span style="COLOR: #000000">&gt;<br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//页面是否使用meta装饰器标签（meta decorator tag）特别指定了一个装饰器？<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">mapper&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">param&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">property.1</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">meta.decorator</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">param&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">property.2</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">mapper</span> <span style="COLOR: #000000">&gt;<br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//页面是否是一个框架集（是的话则不应用装饰器）？ <br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">mapper&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/&gt;<br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//页面是否使用了printable=true&nbsp;参数（是的话则使用打印装饰器）<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">mapper&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">param&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">printable</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">param&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">parameter.name</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">printable</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">param&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">parameter.value</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">true</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">mapper</span> <span style="COLOR: #000000">&gt;<br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//页面时候使用装饰器文件名特别指定了一个装饰器<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">mapper&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/&gt;<br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//页面是否匹配 <em>decorators.xml</em> 文件里描述的样式？<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">mapper&nbsp;</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;</span> <span style="COLOR: #000000">param&nbsp;name</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">config</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;value</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">${decorators-file}</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">/&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">mapper</span> <span style="COLOR: #000000">&gt;<br></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">decorator</span> <span style="COLOR: #000000">-</span> <span style="COLOR: #000000">mappers</span> <span style="COLOR: #000000">&gt;</span> <span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #000000">&lt;/</span> <span style="COLOR: #000000">sitemesh</span> <span style="COLOR: #000000">&gt;</span> </div>
<p><br>你可以针对诸如：客户端操作系统，web浏览器，用户代理等在<em>WEB-INF\sitemesh.xml</em>文件里，通过一个变量覆盖这个行为, 可以在<em>sitemesh-example.war</em> 找到例子。 </p>
<p>通常第一条规则仅用来确定该装饰器是否被使用（Conceptually, the first rule that evaluates to true determines the decorator that is used. ）在上面的例子中，当出现printable=true 参数的时候，装饰器printable.jsp （规则 #3）替代了 main.jsp （规则 #5）。在SiteMesh中，这些规则被描述为 <em>mappers。</em></p>
<p><strong>3 :&nbsp; decorators/*.jsp</strong> </p>
<p>这三个decorators目录下的文件是<em>decorators.xml</em>文件中描述的不同装饰器JSP文件。上面是一个简单的装饰器例子，在后面我们将讨论更复杂的示例。</p>
<p><strong><br>4&nbsp;:&nbsp; sitemesh-2.0.1.jar</strong> </p>
<p>这是SiteMesh最主要的二进制文件，通常被安装在 <em>WEB-INF/lib</em> 目录下。可以在<a href="http://www.opensymphony.com/sitemesh/api"><font color=#004377>www.opensymphony.com/sitemesh/api</font></a> 找到这个库的javadoc。</p>
<p><em>*.tld</em> </p>
<p>SiteMesh使用两个标签库，但大多数人都只需要<em>sitemesh-decorator.tld</em>。还有一个是 ：sitemesh-page.tld 你可以在 <a href="http://www.opensymphony.com/sitemesh/tags.html"><font color=#004377>www.opensymphony.com/sitemesh/tags.html</font></a> 找到相应的文档。我们已经讲述了最主要的标签：head，title和body。在下一章我们来讨论剩下的标签：getProperty。</p>
<img src ="http://www.blogjava.net/naruke/aggbug/123313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/naruke/" target="_blank">扭曲的铅笔</a> 2007-06-11 10:36 <a href="http://www.blogjava.net/naruke/archive/2007/06/11/123313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>