`
ldzyz007
  • 浏览: 704990 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

OpenSymphony——SiteMesh——Decorators

    博客分类:
  • web
阅读更多
一、介绍OpenSymphony

    * OpenSymphony是一个开源项目,致力于提供企业级的J2EE组件。OpenSymphony的组件重点强调简洁、一体化、插件化(还是翻译为可插拔?)以及符合规范。
    * 鉴于上面翻译不够准确,特意附上原文如下:OpenSymphony is an Open Source project dedicated to providing enterprise class J2EE components. Our components aim to stress simplicity, integration, pluggability and specification compliance.

二、介绍SiteMesh

    * SiteMeshs是OpenSymphony的组件之一,用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。
    * 它是一个优于Apache Tiles的Web页面布局、装饰框架。
    * SiteMesh的功能基础:Sitemesh是由一个基于Web页面布局、装饰及与现存Web应用整合的框架。它能帮助我们再由大量页面工程的项目中创建一致的页面布局和外观,如一致的导航条、一致的banner、一致的版权等。它不仅能处理动态的内容,如JSP、PHP、ASP、CGI等产生的内容,还能处理静态的内容,比如HTML的内容,使得它的内容也符合你的页面结构的要求。甚至它能像 include那样将HTML文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。装饰模式是在不必改变原类文件和使用集成的情况下,动态地扩展一个对象的功能。它能通过穿件一个包装对象,也就是装饰来包裹真是的对象。尽管它是由Java语言来实现的,但是它能与其他Web应用很好的集成。
    * 为什么要使用SiteMesh?
      将UI层很多共用的静态或动态部分抽取出来,以达到界面风格统一和美观的目的。Apache Tiles框架可以达到整合通用的静态或动态UI的目的,再加上它与Struts的完美集成,导致大小项目都把他作为UI层的首选框架,但是Tiles也有很多不足,而SiteMesh则刚好可以弥补这些不足。

三、SiteMesh vs Apache Tiles

SiteMesh的优点:

   1. 使用角度,SiteMesh最强的一个特性是SiteMesh将decorator模式用在过滤器上,任何需要被装饰的页面都不知道它要被谁装饰,所以它就可以用来装饰来自php asp cgi等产生的页面。
   2. 可以定义若干个装饰器,根据参数动态地选择装饰器,产生动态的外观以满足要求。
   3. SiteMesh也有一套功能强大的属性体系,它能帮助你构建功能强大而灵活的装饰器。
   4. 简单,系统设计阶段就能把模板文件和SiteMesh框架搭好,哪些页面使用框架,哪些页面不使用框架,通过UI Demo很快就能定义出来。
   5. 在后续开发中所有成员几乎感受不到SiteMesh的存在,各自仅仅关心自己模板功能实现。

Apache Tiles的缺点:

   1. Apache Tiles框架要求所有人不仅仅要了解并且清楚Apache Tiles的存在,并且要特别熟悉每一个Tiles layout模板的作用,否则就可能出现用错模板的情况;
   2. 每个人涉及到的所有WEB页面都需要去配置文件里面逐个配置,不仅麻烦出错的几率还高;

四、SiteMesh的基本原理

      一个请求到服务器后,如果该请求需要SiteMesh装饰,(1)服务器先解释被请求的资源,(2)然后根据配置文件获得用于该请求的装饰器,(3)最后用装饰器装饰被请求资源,(4)将结果一同返回给客户端浏览器。

五、如何使用SiteMesh
以struts2+spring2+hibernate3构架的系统为例
1、下载SiteMesh,下载地址:http://www.opensymphony.com/sitemesh/download.action
2、在工程中引入SiteMesh的必要jar包,和struts2-sitemesh-plugin-2.0.8.jar;
3、修改你的web.xml,在里面加入sitemesh的过滤器,示例代码如下:   
<!-- 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>

注意过滤器的位置:应该在struts2的org.apache.struts2.dispatcher.FilterDispatcher过滤器之前,org.apache.struts2.dispatcher.ActionContextCleanUp过滤器之后,否则会有问题;

4、在下载的SiteMesh包中找到sitemesh.xml,(\sitemesh-2.3\src\example-webapp\WEB-INF目录下就有),将其拷贝到/WEB-INF目录下;(可选)

5、在sitemesh.xml文件中有一个property结点(如下),该结点指定decorators.xml在工程中的位置,让 sitemesh.xml能找到它;按照此路径新建decorators.xml文件,当然这个路径你可以任意改变,只要property结点的 value值与其匹配就行;

<property name="decorators-file" value="/WEB-INF/decorators.xml"/>

   
6、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板,如下示例:我的模板:main.jsp

      具体代码见OpenSymphony——SiteMesh——Decorators(3)
这就是个简单的模板,页面的头和脚都由模板里的静态HTML决定了,主页面区域用的是<decorator:body />标签;
也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头和脚,然后页面自身的内容将自动放到<decorator:body />标签所在位置;

<decorator:title default="Welcome to test sitemesh!" />:读取被装饰页面的标题,并给出了默认标题。
<decorator:head />:读取被装饰页面的<head>中的内容;
<decorator:body />:读取被装饰页面的<body>中的内容;

7、如果某个特殊的需求请求路径在过滤器的范围内,但又不想使用模板,SiteMesh也可以很好的解决这个问题。用第5步说到的decorators.xml进行配置。       
下面是我的decorators.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
    <excludes>
        <pattern>/index.jsp*</pattern>
          <pattern>/login/*</pattern>
    </excludes>
    <decorator name="main" page="main.jsp"> <!-- 指明了一个名为main的装饰器 -->
        <pattern>/*</pattern>
    </decorator>
</decorators>


decorators.xml有两个主要的结点:(main装饰器默认情况下装饰web应用根路径下的所有页面)

   1. decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板
   2. excludes结点则指定了哪些路径的请求不使用任何模板

   如上面代码,/index.jsp和凡是以/login/开头的请求路径一律不使用模板;


另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录;

六、使用SiteMesh总结

   1. 使用SiteMesh带来的不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务逻辑,而不是整个页面的风格和结构。
   2. 它让我们摆脱了大量用include方式复用页面尴尬局面;
   3. 也避免了tiles框架在团队开发中的复杂度;
   4. 它还提供了很大的灵活性以及给我们提供了整合异构Web系统页面的一种方案。

分享到:
评论

相关推荐

    网络应用程序整合框架SiteMesh源码

    SiteMesh是一款网页布局和装饰器框架,也是一个网络应用程序整合框架,它可以用来维护那些很多页面,并且希望保持所有页面的布局、链接和风格一致的大型网站应用整合与维护。使用SiteMesh可以抽象出页面中的公共布局...

    Struts2整合SiteMesh技巧

    &lt;filter-class&gt;com.opensymphony.module.sitemesh.filter.PageFilter&lt;/filter-class&gt; filter&gt; &lt;filter&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;filter-class&gt;org.apache.struts2.dispatcher....

    MiddleGen+Sitemesh.zip

    下载页面:http://www.opensymphony.com/sitemesh/download.action 下载地址:https://sitemesh.dev.java.net/files/documents/887/43018/sitemesh-2.3.zip 新下载地址:...

    sitemesh教程

    sitemesh教程

    jsoup jar包

    &lt;mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper"&gt; ${decorators-file}" /&gt; &lt;/sitemesh&gt; 5.建decorators.xml文件,内容如下: &lt;decorators defaultdir="/pages/_decorators"&gt; ...

    xwork源码下载于opensymphony

    www.opensymphony.com上下载的xwork源码

    com.opensymphony.xwork2.DefaultActionProxy

    com.opensymphony.xwork2.DefaultActionProxy com.opensymphony.xwork2.DefaultActionInvocation org.apache.struts2.dispatcher.FilterDispatcher

    ognl源码下载于opensymphony

    www.opensymphony.com下载的ognl源码

    OpenSymphony公司的xwork资源包

    OpenSymphony公司旗下的一款xwork资源包,开发java项目不可缺少的东西!!!

    javaWeb Sping之OpenSymphony的Quartz(定时器)

    javaWeb Sping之OpenSymphony的Quartz(定时器)。可以自定义定时器的启动频率以及什么时候启动。适用于在指定时间的执行数据库的备份/邮件的自动发送/系统日志的备份

    struts框架——ognl源代码

    刚刚使用wincvs在http://www.opensymphony.com/网站中checkout出来的,需要的下载……

    OpenSymphony公司的ognl资源包

    著名的OpenSymphony公司大家都认识吧!ongl是旗下的一款开发java项目常用的资源包。

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    206) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) at org.apache....

    opensymphony 用户权限控制系统 OSUSER 源码

    opensymphony JAVA用户权限控制系统 OSUSER 源码

    struts-2.1.8.1-src.zip

    SiteMesh (http://www.opensymphony.com/sitemesh/). XWork (http://www.opensymphony.com/xwork/). XPP3 (http://www.extreme.indiana.edu/xgws/xsoap/xpp/). XStream (http://xstream.codehaus.org/).

    struts2-core-2.3.15.3.jar

    SiteMesh (http://www.opensymphony.com/sitemesh/). XWork (http://www.opensymphony.com/xwork/). XPP3 (http://www.extreme.indiana.edu/xgws/xsoap/xpp/). XStream (http://xstream.codehaus.org/).

    struts-2.5.13-docs

    SiteMesh (http://www.opensymphony.com/sitemesh/). XWork (http://www.opensymphony.com/xwork/). XPP3 (http://www.extreme.indiana.edu/xgws/xsoap/xpp/). XStream (http://xstream.codehaus.org/).

    java Spring OpenSymphony的Quartz定时器的时间设置

    java Spring OpenSymphony的Quartz定时器的时间设置

    struts-2.3.15.3-apps.zip

    SiteMesh (http://www.opensymphony.com/sitemesh/). XWork (http://www.opensymphony.com/xwork/). XPP3 (http://www.extreme.indiana.edu/xgws/xsoap/xpp/). XStream (http://xstream.codehaus.org/).

    OpenSymphony-开源

    OpenSymphony是一个开源项目,致力于提供企业级J2EE应用程序和组件。 我们的组件旨在符合规范,并且可以在任何符合J2EE的应用服务器中工作。

Global site tag (gtag.js) - Google Analytics