在网站开发的过程中,通常一个网站会有一个整体的风格,页面都有很多共同的菜单,横栏的底部信息。以前我们会采用include
标签在每个jsp
页面中来不断的包含各种header
, stylesheet
, scripts
and footer
,现在,在sitemesh
的帮助下,我们不必再使用这种方式来保持风格统一了。
sitemesh
的设计思想是装饰者(decorator
)设计模式。SiteMesh使用一个Servlet过滤器,它可以拦截返回的Web浏览器的HTML,提取相关内容,并将其合并到被称为装饰器(Decorator)的模板。
decorator
)设计模式尝试着简短的几句话介绍清楚,发现很难..列一个官方的定义:
1 | The Decorator Pattern attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality. (装饰者模式可以动态地给一个对象增加其他职责。就扩展对象功能来说,装饰者模式比生成子类更为灵活。) |
---|
详细的关于装饰者设计模式的资料,推荐下面两篇文章: 1.http://blog.chinaunix.net/uid-20761674-id-304542.html 2.http://www.cnblogs.com/rush/archive/2011/05/08/Decorator_DesignPattern_NETFramework.html
首先看一下SiteMesh
的工作过程图:
从宏观上来看上图,Header
和Footer
都是在每个界面都是固定或者有细微变化的(但不会有结构上的变化),改变的只是中间的元素。这时候我们可以编写一个decorator
页面(上图中的browser-theme.jsp
),这样在编写实际的展示页面(左上角的Menu.jsp
)时,只需要去展示实际上不同的界面,并指定它需要哪个decorator
修饰,这样在返回结果时,实际上是decorator
和实际的展示页面组合成的新页面,如上图中右下角的Menu.jsp
界面。
看得出来,SiteMesh使得我们可以不必在每个界面都重复编写相同的模板性元素,而只需要专注于实际需要展示的内容。
而且,使用SiteMesh可以实现更大的灵活性,给界面指定不同的decorator
,比如下图中,使用手机浏览器和网页浏览器访问Menu.jsp
时,该页面是被不同的decorator
修饰,最终返回不同的组合界面。
官方介绍:http://wiki.sitemesh.org/wiki/display/sitemesh3/SiteMesh+3+Overview
本文转载自:http://nohup.cc/article/49/