`

布局框架-SiteMesh

    博客分类:
  • Java
阅读更多

 

         最近在一个项目中使用 SiteMesh ,感觉还不错,所以拿出来总结总结。首先,通过网上资料发现 SiteMesh 是由一个基于 Web 页面布局、装饰以及现存 Web 应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条、一致的菜单、一致的版权信息等等。它不仅仅能处理动态的内容,如 JSP ASP PHP 等产生的内容,也能处理静态的内容,如 HTML 的内容,使得它的内容也符合我们自己的页面结构的要求。甚至于它能将 HTML 对象像 include 那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些都是 GOF Decorator 模式可以实现的。

         SiteMesh 框架是 OpenSymphony 团队开发的一个非常优秀的页面装饰器框架,它通过对用户请求进行过滤,并对服务器向客户端响应也过滤(过滤之后加载需要的菜单、导航以及版权信息),然后给原始页面加入一定的装饰( header footer 等),然后把结果返回给客户端。通过 SiteMesh 的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需再使用 include 指令来包含装饰效果,目标页与装饰页完全分离(这样不同的人只需要主要自己的子页面,最后由管理人员统一进行请求地址的配置),如果所有页面使用相同的装饰器,可以使整个 Web 应用具有统一的风格,官网: http://www.opensymphony.com/sitemesh/

         上面的过滤还想多细说一下,就是说用户的一个请求到服务器之后,如果该请求需要 SiteMesh 装饰,服务器先解释被请求的资源,然后根据配置文件获取用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。(这里需要注意的是,有时候我们前台是用过 Ajax 请求到后台服务器的,而服务器返回一个 JSON 对象,这时我们就需要指定 SiteMesh 不要对这个 JSON 对象进行装饰,否则,前台 JS 是无法将装饰后的 JSON 对象转化为 JSON 的。

         废话说了一大堆,下面我们来看看使用 SiteMesh 的流程:

1、  导入相关 jar sitemesh-2.4.jar

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>

 

这里网上说位置:应该在 struts2 org.apache.struts2.dispatcher.ActionContextCleanUp 过滤 器之后 ,org.apache.struts2.dispatcher.FilterDispatcher 过滤器之前,否则会有问题。

3、  在下载的 SiteMesh 包中找到 sitemesh.xml (\sitemesh\src\example-webapp\WEB-INF 目录下 ) 将其拷贝到 /WEB-INF 目录下;

4、  WEB-INF 下新建 decorators.xml 文件

<?xml version="1.0" encoding="UTF-8"?> 
<decorators defaultdir="/decorators"> 
 <!-- 此处用来定义不需要过滤的页面 -->  
    <excludes> 
       <!--一般比如Ajax请求的地址都不需要过滤 -->  <pattern>/fdvequipmentcontrol/getFdvEquipmentsByAreaId.ac*</pattern>
    </excludes> 
  <!-- 用来定义装饰器要过滤的页面,这里的page可以直接是一个JSP页面,也可以是一个后台请求地址 -->  
    <decorator name="inpTemplate" page="/login/inpTemplate.ac"> 
    	<pattern>/intgMainIndex/*</pattern> 
        <pattern>/login/toIntegrateIndex.ac</pattern> 
    </decorator>
</decorators>

 

decorators 结点的 defaultdir 属性指定了模板文件存放的目录 ;

5、  添加模版页

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><decorator:title default="Welcome to test sitemesh!" /></title>
<!-- 页面Head由引用模板的子页面来替换-->
<decorator:head />
</head>

<body>
	    <div class="menu">
           …
       </div>
		<div class="container">
			<!-- 这里的内容由引用模板的子页面来替换 -->
			<decorator:body />
		</div>
	</div>
	<div class="foot">XXXXX &copy;2012</div>
</body>
</html>
 

这就是简单的模板,页面的头、菜单、导航和脚等都是由模板里的静态 HTML 决定,主页面区域的是 <decorator:body /> 标签,也就是说凡是能进入过滤器的请求生成的页面都会默认加上模板上的头、菜单、导航和脚等公用信息,然后将页面自身的内容自动放到 <decorator:body /> 标签所在的位置。 <decorator:title default="Welcome to test sitemesh!" /> ,读取被装饰页面的标题,并给出了默认标题。 <decorator:head /> :读取被装饰页面的 <head> 中的内容;

 

最后说说在项目中使用的体会,使用 SiteMesh 个人认为它不仅仅统一了页面的风格和布局,同时让团队中的各个开发人员更加注重我们自己的子模块的开发,或者说更加关注我们的业务逻辑,而不用每个开发人员都去大量用 include 方式复用页面。它提供了很大的灵活性以及给我们提供了整合异构 Web 系统页面的一个方案。不过在使用时,倒是遇到一个问题 SiteMesh 貌似没什么好的方法,就是项目中使用 SpringMVC 时,比如进入编辑和保存编辑请求的 URL 是同一个 URL ,但请求的方式一个是 GET 一个是 POST 的话, SiteMesh 就没法对这两个请求一个过滤一个不过滤了,后来自己将这两个相同的 URL 改成不同的了。

 

 

 

 

 

 

分享到:
评论

相关推荐

    struts2-sitemesh-plugin-2.2.1.1.jarstruts2

    `struts2-sitemesh-plugin-2.2.1.1.jar`是Struts2框架与Sitemesh集成的插件,使得Struts2应用能够利用Sitemesh的功能来美化和规范化页面布局。 **Struts2框架** Struts2的核心功能包括动作映射、结果处理、数据绑定...

    jqueryui界面框架_sitemesh布局框架

    jqueryui界面框架_sitemesh布局框架

    JSP布局框架SiteMesh.zip

    SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大 量页面构成的...

    jsp 页面框架sitemesh 全面帮助文档及示例

    - **sitemesh.rar** 和 **sitemesh-2.4.1(1).zip**、**sitemesh-2.4.1.zip**:这些是Sitemesh的源码或者不同版本的压缩包,可能包含了示例代码和库文件,供开发者研究和学习。 5. **Sitemesh与其他框架的集成** -...

    sitemesh布局知识点汇总

    - **添加依赖**:将Sitemesh的jar包(例如`sitemesh-2.1.jar`)放置到项目的lib目录下。 - **配置Web.xml**:在Web应用的部署描述文件`web.xml`中注册Sitemesh过滤器,如下所示: ```xml &lt;filter-name&gt;sitemesh...

    sitemesh-3.0.1-javadoc

    SiteMesh是一个网页布局和装饰框架以及Web应用程序集成框架,可帮助创建由页面组成的网站,这些页面需要一致的外观,导航和布局方案。 SiteMesh会拦截对通过Web服务器请求的任何静态或动态生成的HTML页面的请求,...

    sitemesh(example).rar_sitemesh_装修网站java

    SiteMesh 是一个专门为Java开发的开源框架,它的主要功能是对网页进行布局和装饰,以便为大型网站提供统一的视觉风格、导航结构和页面布局。这个框架的出现,极大地简化了开发者在构建复杂网站时对页面样式一致性...

    sitemesh-2.2.1.jar sitemesh-2.2.1.jar

    **sitemesh-2.2.1.jar** 是一个用于Web应用程序界面布局的开源框架,由OpenSymphony团队开发。Sitemesh的主要功能是提供页面装饰能力,它可以帮助开发者统一网站的外观和感觉,实现页面模板和内容的分离。通过在...

    sitemesh-2.3.zip

    在 `sitemesh-2.3.zip` 文件中,包含了该框架的源码、文档、构建文件以及库文件,便于我们了解和使用 Sitemesh。 1. **构建文件** - `build.properties`: 这是一个属性文件,包含了构建过程中的配置参数,如版本...

    java sitemesh 页面框架

    Java Sitemesh是一个开源的页面布局和装饰框架,它的主要目标是帮助开发者统一网站的外观和感觉,提高代码复用性,并简化页面的复杂性。Sitemesh通过将页面分为内容区域和装饰模板来实现这一目标,使得开发者可以...

    SpringBoot框架示例:整合SpringMVC、MyBatis、安全框架Shiro、页面布局框架Sitemesh.zip

    Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的...

    sitemesh框架学习

    相信大家用过frame页面框架、iframe页面框架、include导入的方式都可以实现框架布局。但是这些方法out了,学习了sitemesh之后你就会发现在页面中的头部和底部自动导入;这才是真技术。像frame、iframe只适合后台框架...

    基于AdminLTE的开发框架-AdminEAP.zip

    描述中提到的sitemesh3是一个网页布局框架,用于解决网页模板和主题应用的问题。在AdminLTE的基础上引入Sitemesh,可以实现全局的页面装饰,如统一的头部、底部和侧边栏,从而提高代码复用性和网站一致性。Sitemesh3...

    sitemesh入门demo

    - 在`sitemesh-demo01`项目中,可以看到一个简单的例子,包括装饰器模板、被装饰的页面和Web应用的配置。通过运行这个示例,你可以直观地了解Sitemesh如何工作。 7. **扩展与优化** - Sitemesh支持自定义装饰策略...

    sitemesh框架简单例子

    Sitemesh是一款强大的Web页面布局和装饰框架,它主要用于帮助开发者实现网站的统一外观和感觉。这个框架的主要功能是将页面的主体内容与页眉、页脚、侧边栏等通用部分分离,使得在大量网页中保持一致的设计风格变得...

    sitemesh-3.0.0的库和源码

    总结来说,Sitemesh 3.0.0 是一个强大的网页布局框架,它的出现极大地方便了Web开发者在实现复杂页面结构和统一网站样式时的工作。通过深入理解和使用Sitemesh,可以提高开发效率,同时保证网站的用户体验。

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

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

    sitemesh3-demo

    【sitemesh3-demo】是一个基于Sitemesh3框架的示例项目,旨在展示如何在Web应用程序中有效地实现页面布局和装饰功能。Sitemesh是一个开源的Java Web应用框架,主要用于增强网页的外观和结构,通过定义装饰模板,可以...

    sitemesh网页组合框架 demo

    **Sitemesh网页组合框架** 是一个开源的Java Web应用程序框架,主要用于网页布局和装饰。它的核心功能是帮助开发者统一网站的外观和感觉,通过自动应用页面模板来增强Web应用程序的界面一致性。在传统的Web开发中,...

Global site tag (gtag.js) - Google Analytics