SIteMesh介绍

article/2025/9/26 10:13:59

转自:http://javauu.com/thread-27-1-1.html

一、SIteMesh介绍

一、SiteMesh简介
SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。与传统区别如下图:
sitemesh-1-1.jpg (45.97 KB)
2008-9-9 22:40
sitemesh-1-2.jpg (53.63 KB)
2008-9-9 22:40

SIteMesh官方地址: http://www.opensymphony.com/sitemesh/index.html
SIteMesh官方 下载: http://www.opensymphony.com/sitemesh/download.html
SIteMesh 2.3下载: http://www.javauu.com/downloads/resource/sitemesh-2.3.zip

二、SiteMesh原理
SiteMesh框架是OpenSymphony团队开发的一个非常优秀的页面装饰器框架,它通过对用户请求进行过滤,并对服务器向客户端响应也进行过滤,然后给原始页面加入一定的装饰(header,footer等),然后把结果返回给客户端。通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需再使用include指令来包含装饰效果,目标页与装饰页完全分离,如果所有页面使用相同的装饰器,可以是整个Web应用具有统一的风格。

三、SiteMesh简单例子
接下来通过一个SiteMesh简单例子来了解SiteMesh的功能:

  • 将sitemesh-2.3.jar放 到 [web-app]/WEB-INF/lib目录下;
  • 在[web-app]/WEB-INF/新建一个decorators.xml文件,包含以下内容:
    普通浏览复制代码打印代码关于程序
  • <?xml version="1.0" encoding="utf-8"?>  
<decorators defaultdir="/decorators">       <!-- 此处用来定义不需要过滤的页面 -->       <excludes>       </excludes>       <!-- 用来定义装饰器要过滤的页面 -->       <decorator name="main" page="main.jsp">           <pattern>/*</pattern>       </decorator>   </decorators>  
<?xml version="1.0" encoding="utf-8"?>
<decorators defaultdir="/decorators"><!-- 此处用来定义不需要过滤的页面 --><excludes></excludes><!-- 用来定义装饰器要过滤的页面 --><decorator name="main" page="main.jsp"><pattern>/*</pattern></decorator>
</decorators>
在[web-app]/WEB-INF/web.xml添加以下内容:
普通浏览复制代码打印代码关于程序
<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>  
 <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-app]下创建一个decorators文件夹,在该文件下再创建一个装饰页面main.jsp,包含以下内容:
普通浏览复制代码打印代码关于程序
<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>   <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   <html>    <!-- 第一个装饰页面 -->       <head>    <!-- 从被装饰页面获取title标签内容,并设置默认值-->    <title><decorator:title default="默认title"/></title>    <!-- 从被装饰页面获取head标签内容 -->           <decorator:head/>       </head>          <body>          <h2>SiteMesh装饰header</h2>          <hr />       <!-- 从被装饰页面获取body标签内容 -->       <decorator:body />          <hr />          <h2>SiteMesh装饰footer</h2>       </body>   </html>  
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><!-- 第一个装饰页面 --><head><!-- 从被装饰页面获取title标签内容,并设置默认值--><title><decorator:title default="默认title"/></title><!-- 从被装饰页面获取head标签内容 --><decorator:head/></head><body><h2>SiteMesh装饰header</h2><hr /><!-- 从被装饰页面获取body标签内容 --><decorator:body /><hr /><h2>SiteMesh装饰footer</h2></body>
</html>
在[web-app]下创建被装饰页面index.jsp,包含以下内容:
普通浏览复制代码打印代码关于程序
<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   <html>    <!-- 第一个被装饰(目标)页面  -->    <head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title>被装饰(目标)页面title</title>    </head>         <body>    <h4>被装饰(目标)页面body标签内内容。</h4>    <h3>使用SiteMesh的好处?</h3>    <ul>        <li>被装饰(目标)页面和装饰页面完全分离。</li>        <li>做到真正的页面复用,一个装饰页面装饰多个被装饰(目标)页面。</li>         <li>更容易实现统一的网站风格。</li>         <li>还有。。。</li>        </ul>    </body>   </html>  
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><!-- 第一个被装饰(目标)页面  --><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>被装饰(目标)页面title</title></head><body><h4>被装饰(目标)页面body标签内内容。</h4><h3>使用SiteMesh的好处?</h3><ul><li>被装饰(目标)页面和装饰页面完全分离。</li><li>做到真正的页面复用,一个装饰页面装饰多个被装饰(目标)页面。</li><li>更容易实现统一的网站风格。</li><li>还有。。。</li></ul></body>
</html>
运行结果如下图:
sithmesh-result.jpg (70.96 KB)
2008-9-9 22:40


四、总结
从以上的例子,可以看出通过SiteMesh装饰,不需要在每个目标页面中将header和footer等共同文件include进去,被装饰(目标)页面和装饰页面完全分离。本文只对SiteMesh做一个简单的介绍,SiteMesh可以Velocity,FreeMarker等开源模板工具结合使用,降低页面开发复杂度。
本文例子工程SiteMeshDemoL1代码下载:
SiteMeshDemoL1.rar (153.96 KB)
SiteMeshDemoL1.rar (153.96 KB)
下载次数: 0
2008-9-9 22:40

http://chatgpt.dhexx.cn/article/5GINI0WV.shtml

相关文章

【CSRF】学习关于CSRF攻击和防范

文章目录 1.CSRF攻击是什么2.CSRF攻击如何实现2.1 使用GET请求的CSRF的攻击例子2.2 使用post请求的CSRF攻击 3.如何防御CSRF攻击3.1 什么是CSRF令牌3.2 反-CSRF令牌工作流程3.3 同站Cookie策略 4.结论 高质量原文&#xff1a; CSRF Attacks: Anatomy, Prevention, and XSRF To…

CSRF攻击简述

一.CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;也被称为&#xff1a;one click attack/session riding&#xff0c;缩写为&#xff1a;CSRF/XSRF。 二.CSRF可以做什么&#xff…

如何防止CSRF攻击?

文章目录 一、什么是CSRF&#xff1f;二、CSRF的几种类型1、GET类型的CSRF2、POST类型的CSRF3、链接类型的CSRF 三、CSRF的特点四、防护策略1、同源检测如何阻止外域请求无法确认来源域名情况 2、CSRF Token原理1&#xff09;将CSRF Token输出到页面中2&#xff09;页面提交的请…

CSRF攻击原理以及防御方法

CSRF攻击原理以及防御方法 CSRF概念&#xff1a;CSRF跨站点请求伪造(Cross—Site Request Forgery)&#xff0c;跟XSS攻击一样&#xff0c;存在巨大的危害性&#xff0c;你可以这样来理解&#xff1a; 攻击者盗用了你的身份&#xff0c;以你的名义发送恶意请求&#xff0c;对服…

csrf攻击 java_Web常见攻击手段-CSRF攻击

什么是CSRF攻击&#xff1f; 跨站请求伪造(Cross-Site Request Forgery, CSRF)&#xff0c;恶意网站通过脚本向当前用户浏览器打开的其它页面的 URL 发起恶意请求&#xff0c;由于同一浏览器进程下 Cookie 可见性&#xff0c;导致用户身份被盗用&#xff0c;完成恶意网站脚本中…

什么是CSRF攻击?

什么是 CSRF 攻击&#xff1f; CSRF 概念&#xff1a;CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者 Session Riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c;是一种对网站的恶意利 用。 尽…

【Web 安全】CSRF 攻击详解

文章目录 一、CSRF 简介二、CSRF 原理三、CSRF 的危害四、CSRF 的攻击类型1. GET型2. POST型 五、CSRF 的防御1. 验证 HTTP Referer 字段2. 在请求地址中添加 token 并验证3. 在 HTTP 头中自定义属性并验证 六、WAF 防御 CSRF参考链接 一、CSRF 简介 CSRF&#xff08;Cross Si…

如何强制卸载软件,强制卸载的工具。

日常使用电脑过程中经常会遇到一些流氓捆绑软件&#xff0c;今天我们教大家如何轻松的强制卸载流氓软件。非常小巧而且强大的一款强制卸载工具&#xff0c;干净清爽。 工具/原料 Geek Uninstaller 方法/步骤 首先我们下载工具&#xff0c;百度输入geek点击搜索&#xff0c;如下…

HTML文件命名_没有删不掉的文件:强制终止、一键解锁,样样精通

微信搜一搜 麦克NO1 日常在使用电脑的时候&#xff0c;经常会遇到这样一个问题&#xff1a;想要删除某文件夹里的文件是&#xff0c;系统弹出&#xff1a;该文件无法删除、被系统占用等。那么&#xff0c;一旦遇到该问题该如何应对呢&#xff1f;以后不再担心&#xff0c;接下来…

使用管理员权限强制删除文件夹

1、鼠标右键要删除的文件&#xff0c;选择属性&#xff0c;如图所示&#xff1a;2、在界面中&#xff0c;切换到安全选项&#xff0c;点击编辑按钮&#xff0c;如图所示&#xff1a; 3、在窗口中&#xff0c;点击添加&#xff0c;接着在界面中输入对象名称来选择里面输入Admin…

强制删除鲁大师所有文件

方法一&#xff1a;“操作无法完成 文件已在windows文件资源管理器中打开”评论最多的解决办法 当出现拒绝访问的情况&#xff0c;可用方法二 方法二&#xff1a;Windows 10下删除鲁大师卸载后的残留文件夹 1.按住WinR&#xff0c;出现运行对话框&#xff0c;输入regedit&am…

win10 强制删除文件夹

在win10下编译代码时&#xff0c;发现无法通过delete删除build文件夹&#xff0c;提示需要用户权限&#xff0c;参考该教程&#xff0c;可以利用命令行进行删除。 在资源管理器中打开power shell 显示的powershell如下&#xff1a; 删除指定的文件夹或文件

Android 单元测试 一

最近在看软件TDD方面的知识&#xff0c;联想到android也有单元测试&#xff0c;所以就打算实践下&#xff0c;至于为啥要做单元测试&#xff0c;单元测试有那些好处&#xff0c;看官请移步 度娘和google。现在就记录下单元测试第一弹。我用的AS&#xff0c;AS在我们新建一个pro…

Docker版Jenkins持续集成环境部署

前提&#xff1a; 1、已配置java环境 2、已配置maven环境 3、已安装tomcat 一、Jenkins安装 1. jenkins部署 1.1 命令行启动方式 java -jar jenkins.war --httpPort80811.2 Tomcat 部署方式 将下载的jenkins.war包放到apache-tomcat-9.0.30/webapps目录下如果启动不想带ht…

java做简单的unitTest

一、单元测试准备 引入junit和mockito包 单元测试主要注解&#xff1a; SpringBoot RunWith 测试运行器 Before 在测试方法之前运行 Test 测试方法 After 测试方法之后运行 InjectMocks 待测试类 Mock 测试中需要使用到的类(模拟类) Spy 测试中需要使用到的类(真实类) 单元测…

网络编程懒人入门(一):快速理解网络通信协议(上篇)

1、写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统&#xff0c;很多时候连基本的网络编程理论&#xff08;如网络协议等&#xff09;都不了解&#xff0c;就贸然定方案、写代码&#xff0c;显得非常盲目且充满技术风险。 即时通讯网论坛里精心整理了《[通俗…

python入门之网络编程Scoket

1、网络编程基础&#xff1a; Sockets&#xff08;套接字&#xff09;可以在一个进程内&#xff0c;在同一机器上的进程之间&#xff0c;或者在不同主机的进程之间进行通信&#xff0c;主机可以是任何一台有连接互联网的机器。Socket主要是使用IP地址&#xff0c;协议&#xf…

CS编程入门篇

CS编程入门 第一部分&#xff1a;JavaScript、NodeJs CSS HTML1.1 前端1.2 网络 第二部分&#xff1a;Python第三部分&#xff1a;Java3.1 面对过程POP&#xff08;性能&#xff09;、面对对象OOP&#xff08;类、对象 封装、继承、多态&#xff09;、面向切面AOP 第四部分&a…

Python快速编程入门课后习题答案

文章目录 前言第一章一、填空题二、判断题三、选择题四、简答题 第二章一、填空题二、判断题三、选择题四、简答题 第三章一、填空题二、判断题三、选择题四、简答题 第四章一、单选题二、判断题三、填空题四、程序分析题 第五章一、选择题二、判断题三、填空题四、简答题五、程…

编程入门

这篇文章是特地为对编程有兴趣的同学特意准备的,非战斗人员请速速撤离。 0.选择一门编程语言 选择语言的话不需要纠结太多(但是不推荐易语言之流:),因为编程语言都是大同小异。并且在你精通一门语言之后再去学另一种编程语言时,你会发现卧槽要死要死,这么简单。 如果你…