由于最近项目的原因,接触到了sitemesh。

SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。提供了一种在网站中更有效的组织页面布局的方式。

SiteMesh设计思想是,用户发送request至服务器,服务器根据此request生成动态数据,生成网页,准备返回给客户端。就在返回前,SiteMesh进行拦截,对此网页进行解析,将title、body等部分拆解出来,套上模板后,再返回给客户端。由于SiteMesh在返回客户端的最后一步工作,此时的网页已经具备了标准的html网页格式,因此SiteMesh只需解析标准的html网页,无需考虑各个Web应用是应用了JSP、ASP,还是Velocity技术,相当灵活。

SiteMesh使用了Decorator的设计模式。

下面我就用一个通俗易懂的例子告诉大家怎么使用它。

这个就是我这个项目的结构,jsp页面都可以随意放只要指明路径就可以了,decorators.xml放在WEB-INF下面。
首先是decorators.xml的书写:

[html] view plaincopy print?
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <decorators defaultdir="/decorators">
  3. <!-- 用第一套模板 -->
  4. <decorator name="basic-theme" page="basic-theme.jsp">
  5. <pattern>/data/*</pattern>
  6. </decorator>
  7. <!-- 用第二套模板 -->
  8. <decorator name="basic-theme2" page="basic-theme2.jsp">
  9. <pattern>/data2/*</pattern>
  10. </decorator>
  11. <!-- 不做任何装饰 -->
  12. <decorator name="none">
  13. <pattern>/data3/*</pattern>
  14. </decorator>
  15. </decorators>

你可以选择你自己的模板在page里面定义,<pattern>里面的是你要作用的页面的路径。
下面是aa.jsp

[html] view plaincopy print?
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>jsp</title>
  6. </head>
  7. <body>
  8. 我爱中国!
  9. </body>
  10. </html>

aa2.jsp

[html] view plaincopy print?
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>jsp</title>
  6. </head>
  7. <body>
  8. 我爱中国2!
  9. </body>
  10. </html>

aa3.jsp

[html] view plaincopy print?
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>jsp</title>
  6. </head>
  7. <body>
  8. 我爱中国3!
  9. </body>
  10. </html>

最重要的xml的配置:

加上下面一句

[html] view plaincopy print?
  1. <!-- 过滤作用,使发送给客户端的页面通过decorator装饰再返回 -->
  2. <filter>
  3. <filter-name>sitemesh</filter-name>
  4. <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>sitemesh</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

下面是装饰页面basic-theme.jsp

basic-theme2.jsp

下面来看看效果图:
下面是用了第一个装饰模板的页面图。

下面是用了第二个装饰模板的页面。

下面是没有用装饰模板的页面。

看到这里相信大家应该对sitemesh很期待了吧,赶紧自己去试试吧。这是jar包下载地址。

sitemesh.jar

sitemesh的使用相关推荐

  1. SiteMesh介绍

    1. SiteMesh简介 SiteMesh是由一个基于Web页面布局.装饰以及与现存Web应用整合的框架.它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的bann ...

  2. Struts和Sitemesh整合,实现多个装饰器

    2019独角兽企业重金招聘Python工程师标准>>> web.xml配置 <filter><filter-name>struts-prepare</f ...

  3. sitemesh排除装饰action的心得

    sitemesh装饰模式的强大就不用说了,但使用过程中遇到的最郁闷的莫过于排除装饰action的困扰了,例如使用某个ajax请求要求返回不装饰的数据,但sitemesh却死活给你装饰了,以前用了个小技 ...

  4. Sitemesh排除Exclude不装饰特定页面的解决办法

    有时候项目中有些文件不需要Sitemesh装饰,例如Error.htm, Error.jsp, OnlineHelp.htm等等.但是用Sitemesh的Exclude不管用,用Printable也不 ...

  5. sitemesh官网简介,安装配置教程。(非常适合新手)

    新手一枚,最近研究openfire,看到网上资料其页面布局用的是sitemesh,第一次听说,上网查了好多资料,也看了好多博客介绍,觉得好神奇的技术(高手勿喷).不过我也很好奇现在和sitemesh类 ...

  6. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

    一.SiteMesh项目简介 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较 ...

  7. struts2.2.1关于sitemesh和freemarker整合的细节

    http://nighty.iteye.com/blog/788241 有段时间没有使用struts2了,上了官网发现已经更新到2.2.1版本,没有细看note,照着以前老的方式配置web.xml,发 ...

  8. Struts2整合SiteMesh

    http://takeme.iteye.com/blog/1716488 1.导入Struts2的jar 和 sitemesh.jar 和 Struts2-sitemesh-plugin.jar  c ...

  9. 使用sitemesh建立复合视图 - 1.hello

    http://docs.huihoo.com/java/sitemesh/ (作者:chen-neu ,提供给 huihoo.com 发布) 使用sitemesh建立复合视图 - 1.hello  & ...

最新文章

  1. Spring Boot集成Swagger导入YApi@无界编程
  2. 江苏专转本全国计算机一级考试成绩查询,江苏“专转本”新规:考生需获计算机一级及以上证书...
  3. bim推荐计算机配置,BIM建模推荐电脑配置清单 适合Revit软件的BIM建模电脑主机配置(2)...
  4. ASP.Net MVC的学习
  5. mysql写入数据乱码问题的解决
  6. leetcode 最后一个单词的长度
  7. NO--14 微信小程序,左右联动二
  8. 前端之 JavaScript 常用数据类型和操作
  9. 知名大学博士毕业都去哪儿?55所高校大数据揭秘
  10. 使用SO-PMI算法构建行业/专业情感词典
  11. Windows RDP远程桌面无密码账户
  12. JVM学习-垃圾回收器
  13. 编程利器 Beyond Compare 的使用
  14. jQuery常用插件介绍
  15. 计算机二级系统班C语言讲义,计算机二级C语言2017辅导讲义:C语言基本知识
  16. Python爬虫之PyQuery
  17. 基于CELLO的Fabric网络环境部署
  18. 【信道编码/Channel Coding】汉明码Hamming Code
  19. 大学生申请专利需要多少钱
  20. Guice——轻量级注解Guice简单之美

热门文章

  1. Kotlin的2017年总结与2018年展望
  2. java后台图片的上传预览接口 IO流
  3. 应用新安全组 - 每天5分钟玩转 OpenStack(116)
  4. 【AIX 命令学习】创建逻辑卷!
  5. 【Android实战】记录自学自己定义GifView过程,能同一时候支持gif和其它图片!【有用篇】...
  6. Https 客户端与服务器交互过程梳理(转)
  7. Java学习笔记3——继承
  8. HP小型机superdome配置MC双机、PV、VG、LV初体验
  9. rancher2.0安装mysql_高可用rancher集群搭建
  10. hash 建表 query 统计重复个数