sitemesh自学整理

这两天自学了一下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>标签
  

你可能感兴趣的:(sitemesh)