这两天自学了一下sitemesh,从网上找了些资源,自己又整理一下,做了个小例子,记下来吧,呵呵;各位牛人大哥,也帮忙看看,要是小弟走弯路了及时把我拉回来 ,O(∩_∩)O~
简单介绍一下sitemesh,sitemesh是使用设计模式中的装饰模式来进行页面开发的组件,sitemesh将视图界面分为装饰页面和被装饰页面,装饰页面又叫做装饰器视图界面(下文中称为“装饰器”);举个简单的例子装饰器就是衣服,被装饰页面就是裸体MM,MM穿上衣服出来了,咱们看到的就是穿着衣服的MM(⊙o⊙) (我承认。。有点无聊)
下面进入正题:
1)开发中相拥sitemesh就得让人家先住进来吧。。。O(∩_∩)O~,住哪呢,将sitemesh的jar包放在WEB-INF/lib下,我用的是sitemesh-2.3jsr
2)向家里的其他小盆友介绍一下这个新童鞋,并且限制一下他的活动范围吧。。。(咱不喜欢限制),web.xml文件中加入下面的代码(其实写法和配正常的过滤器一样):
<!-- sitemesh配置 -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样Web项目中的JSP或其他视图界面都可以被sitemesh调用进行页面布局了。
3)下面定义decorators.xml文件,放在WEB-INF路径下该文件是用来定义所有的装饰器视图界面的;一般定义装饰器都会制定了被装饰页面或者某文件路径,在该文件路径下的所有文件都是被装饰页面。
<decorator defaultdir="/_decorators">
<excludes>
<pattern>/index.jsp</pattern>
</excludes>
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
<decorator name="second" page="second.jsp">
</decorator>
</decorator>
下面简单介绍一下:
<decorators>标签中的defaultdir属性是表明装饰器文件的默认路径,上面的代码装饰器文件的默认路径是webroot下的_decorators文件夹
<exculudes>标签中一般都制定不需要被装饰的页面。用<pattern>标签一个一个的定义,也可以用/*的形式代表当前目录下的所有文件;上面的代码就是告诉装饰器不装饰index.jsp页面的意思
<decorators>是定装饰器页面需要使用的标签,其中name属性是让开发者自己定义装饰器的名字,page属性是制定装饰器文件的路径和具体的名字。在上面的代码中可以看出定义了两个装饰器 一个叫main 另一个叫second ,第一个装饰器main的作用范围是出了index.jsp的所有的页面文件;第二个装饰器second没有指明要装饰的页面文件,为什么呢?因为后续可以在装饰器中使用一些标记来控制其装饰那个页面;
4)下面来看看我们定义的这两个 装饰器页面 在_decorators文件夹中
main.jsp
...
<title><decorator:title default="装饰的页面"></decorator:title></title>
...
<h1>SiteMesh的例子 </h1><br>
<!-- 被装饰页面的内容填充在这里 -->
<table border="1" bgColor="#c0c0c0">
<tr>
<td>被装饰页面的内容</td>
<td>second 装饰器的内容</td>
</tr>
<tr>
<td>
<!--被装饰页面的内容显示-->
<decorator:body></decorator:body></td>
<td>
<!--second装饰器 pages属性 制定了被装饰的页面 name属性指定了用到哪个装饰器-->
<page:applyDecorator page="first.jsp" name="second">
<!-- 设置参数进行传递 -->
<page:param name="email">[email protected]</page:param>
</page:applyDecorator>
</td>
</tr>
</table>
需要注明的是,在装饰器开始部分需要引入标记库
用到decorator标记的装饰器需要引入
<%@taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
用到page标记的装饰器需要引入
<%@taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="page"%>
<page:applyDecorator>标签是允许开发者可以自行选择哪一个装饰器;
其中嵌套<page:param>是用来传递参数,name属性就是参数名,例子中参数名是email在需要取出参数的 时候使用<page:getProperty property="email">取出
装饰器second 在_decoratros/second.jsp
<!--body部分-->
<decorator:body></decorator:body><br/>
<!-- 得到已定义参数内容并使用下列标签在这里显示 -->
<decorator:getProperty property="email"></decorator:getProperty>
没啥可说的 ,上边都介绍清楚了;
(5)被装饰页面
sitemesh.jsp
<p>就这一句话</p>
first.jsp
<strong>first.jsp</strong>
发现了什么???
对 被装饰页面很简,星星还是那个星星;
为什么呢?
因为sitemesh采取松耦合理念,因此被装饰的视图界面往往都是JSP、HTML等简单的视图文件。不需要使用<page>、<decorator>标签。这些sitemesh标签往往在装饰器文件中定义
(6)
下面看一下运行的效果吧
打开服务器 ,在留恋其输入被装饰页面的地址
sitemesh.jsp
....在oschina上写博客 还不会发图片。。。等我学会的啊。。
由于时间紧迫,下次介绍
<decorator:usePage>、<decorator:useHtmlPage>、<decorator:head>标签