omen commander one有超频功能吗

sitemesh的使用方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
sitemesh的使用方法
上传于|0|0|文档简介
&&jsp框架ssh中布局sitemash的使用
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢使用SiteMesh做网页布局 - 推酷
使用SiteMesh做网页布局
SiteMesh是一个基于GoF的Decorator模式的,用于页面布局的框架。能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观。
这里我们将会把它整合到JBookShelf里去。要和Struts2整合,先在pom.xml添加以下插件,该插件会将依赖的SiteMesh也一并包含到项目中。
&dependency&
&groupId&org.apache.struts&/groupId&
&artifactId&struts2-sitemesh-plugin&/artifactId&
&version&2.3.12&/version&
&/dependency&
将web.xml配置中原来的
&filter-name&struts2&/filter-name&
&filter-class&
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
&/filter-class&
&filter-mapping&
&filter-name&struts2&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&filter-name&struts-prepare&/filter-name&
&filter-class&
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter
&/filter-class&
&filter-name&sitemesh&/filter-name&
&filter-class&
com.opensymphony.sitemesh.webapp.SiteMeshFilter
&/filter-class&
&filter-name&struts-execute&/filter-name&
&filter-class&
org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter
&/filter-class&
&filter-mapping&
&filter-name&struts-prepare&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&filter-mapping&
&filter-name&sitemesh&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&filter-mapping&
&filter-name&struts-execute&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
这里要注意过滤器的位置:SiteMesh过滤器必须在StrutsPrepareFilter之后和StrutsExecuteFilter之前,否则在SiteMesh的修饰器页面中将访问不到ActionContext。这是因为Struts2的所有值是保存在Stack Context或者ValueStack中的,默认情况下,某个过滤器一旦访问了该Stack Context或ValueStack,里面对应的值会被清洗掉。如果先使用Struts2的StrutsPrepareAndExecuteFilter来过滤用户请求,则SiteMesh的过滤器将无法取得Stack Context或者ValueStack中的数据。为了解决这个问题,Struts2提供了StrutsPrepareFilter和StrutsExecuteFilter类(在2.1.3版本前是ActionContextCleanUp和FilterDispatcher)。通过它们协同来确保SiteMesh正常工作。
在WEB-INF下添加decorators.xml文档:
&?xml version=&1.0& encoding=&UTF-8&?&
&decorators defaultdir=&/layouts&&
&excludes&
&pattern&/stylesheets/*&/pattern&
&pattern&/javascripts/*&/pattern&
&pattern&/images/*&/pattern&
&/excludes&
&decorator name=&application& page=&application.jsp&&
&pattern&/*&/pattern&
&/decorator&
&/decorators&
stylesheets、javascripts、images目录下的内容是不需要被修饰的,可以把它们放到
中排除掉。
新建/layouts/application.jsp模版页:
&%@ taglib uri=&/struts-tags& prefix=&s& %&
&%@ taglib uri=&/sitemesh/decorator& prefix=&decorator& %&
&!DOCTYPE html&
&meta charset=&UTF-8&&
&title&&decorator:title default=&JBookShelf& /&&/title&
&decorator:head /&
&s:if test=&#session.user_session_key != null&&
&s:a action=&listBook&&All Books&/s:a&
Welcome, you have logined.
&s:a action=&logout&&Logout&/s:a&
&s:a action=&login!input&&Login&/s:a& |
&s:a action=&register!input&&Register&/s:a&
&div&Navigation&/div&
&decorator:body /&
&div&Footer&/div&
代码下载:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致一、SiteMesh简介 SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。与传统区别如下图:SIteMesh官方地址:/sitemesh/index.htmlSIteMesh官方下载:/sitemesh/download.htmlSIteMesh 2.3下载:/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代码 &&?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添加以下内容: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&&&在[web-app]下创建一个decorators文件夹,在该文件下再创建一个装饰页面main.jsp,包含以下内容:Html代码 &&%@&page&language=&java&&contentType=&text/&charset=utf-8&&&&&&&pageEncoding=&utf-8&%&&&&%@&taglib&uri=&/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,包含以下内容:Html代码 &&%@&page&language=&java&&contentType=&text/&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/&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&&&四、总结从以上的例子,可以看出通过SiteMesh装饰,不需要在每个目标页面中将header和footer等共同文件include进去,被装饰(目标)页面和装饰页面完全分离。本文只对SiteMesh做一个简单的介绍,SiteMesh可以Velocity,FreeMarker等开源模板工具结合使用,降低页面开发复杂度。转自:/topic/251521
上传按钮&input type='f
最新教程周点击榜
微信扫一扫5393人阅读
开源技术(如Struts/spring/Hibernate等)(70)
一、SiteMesh项目简介 &&&&& OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。 &&&&&& Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大 量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容, 使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板 的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。 &&&&&& 官方:/sitemesh/ &&&&&& 下载地址:/sitemesh/download.action 目前的最新版本是Version 2.3; 二、为什么要使用SiteMesh? &&& 我们的团队开发J2EE应用的时候,经常会碰到一个比较头疼的问题: &&&&&&&& 由于Web页面是由不同的人所开发,所以开发出来的界面通常是千奇百怪,通常让项目管理人员苦笑不得。 &&&& 而实际上,任何一个项目都会要求界面的统一风格和美观,既然风格统一,那就说明UI层肯定有很多可以抽出来 共用的静态或动态部分;如何整合这些通用的静态或动态UI呢?Apache Tiles框架站了出来很好的解决了这一问题, 再加上他与struts的完美集成,导致大小项目都把他作为UI层的首选框架, 但是: && Tiles确实有着它很多的不足之处,下文我会介绍,本文想说的是,除了Apache Tiles框架,其实我们还有更好的解 决方案,那就是:SiteMesh; 本文 && && 介绍了一个基于Web页面的布局、装饰以及应用整合的框架Sitemesh,它能帮助你为你的应用创建一致的外观, 很好的取代Apache T 三、SiteMesh VS Apache Tiles &&&& 用过struts的朋友应该对Apache Tiles的不会陌生,我曾经有一篇文章介绍过struts中tiles框架的组合与继承, 现在怎么看怎么觉得复杂; &&&&& &&&&&& 从使用角度来看,Tiles似乎是Sitemesh标签&page:applyDecorator&的一个翻版。其实sitemesh最强的 一个特性是sitemesh将decorator模式用在过滤器上。任何需要被装饰的页面都不知道它要被谁装饰,所以它就 可以用来装璜来自php、asp、CGI等产生的页面了。你可以定义若干个装饰器,根据参数动态地选择装饰器, 产生动态的外观以满足你的需求。它也有一套功能强大的属性体系,它能帮助你构建功能强大而灵活的装饰器。 相比较而言,在这方面Tiles就逊色许多。 &&&&&& 个人觉得在团队开发里面,Apache Tiles框架会导致所有人不仅仅要了解并且清楚Apache Tiles的存在, 并且要特别熟悉每一个Tiles layout模板的作用,否则就可能出现用错模板的情况;除此之外,每个人涉及到 的所有WEB页面都需要去配置文件里面逐个配置,不仅麻烦出错的几率还高; &&&&&& 而以上所有的不足都是SiteMesh所不存在的; 四、SiteMesh的基本原理 &&&&& 一个请求到服务器后,如果该请求需要sitemesh装饰,服务器先解释被请求的资源,然后根据配置文件 获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。 五、如何使用SiteMesh && 这里以struts2+spring2+hibernate3构架的系统为例 &&&& 1、下载SiteMesh &&&&&&&&& 下载地址:/sitemesh/download.action 目前的最新版本是Version 2.3; &&&&& &&&&&&& 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/sitemesh/decorators.xml"/& &&& &&&&& 6、在WebRoot目录下新建decorators目录,并在该目录下新建一个模板jsp,根据具体项目风格编辑该模板, 如下示例:我的模板:main.jsp &%@ page language="java" pageEncoding="UTF-8"%& &%@taglib prefix="decorator" &&&& uri="/sitemesh/decorator"%& &%@taglib prefix="page" uri="/sitemesh/page"%& &!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"& &% &&&& response.setHeader("Pragma", "no-cache"); &&&& response.setHeader("Cache-Control", "no-cache"); &&&& response.setDateHeader("Expires", 0); %& &html& &&& &head& &&&&&&& &title&&decorator:title default="kangxm test" /& &&&&&&& &/title& &&&&&&& &!-- 页面Head由引用模板的子页面来替换 --& &&&&&&& &decorator:head /& &&& &/head& &&& &body id="page-home"& &&&&&&& &div id="page-total"& &&&&&&&&&&& &div id="page-header"& &&&&&&&&&&&&&&& &table width="100%" border="0" cellspacing="0" cellpadding="0"& &&&&&&&&&&&&&&&&&&& &tr& &&&&&&&&&&&&&&&&&&&&&&& &td& &&&&&&&&&&&&&&&&&&&&&&&&&&& &div class="topFunc"& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 我的账户 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& | &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 退出 &&&&&&&&&&&&&&&&&&&&&&&&&&& &/div& &&&&&&&&&&&&&&&&&&&&&&& &/td& &&&&&&&&&&&&&&&&&&& &/tr& &&&&&&&&&&&&&&& &/table& &&&&&&&&&&& &/div& &&&&&&& &/div& &&&&&&& &!-- end header --& &&&&&&& &!--&& Menu Tag begin --& &&&&&&& &div id="page-menu" style="margin-top: 8 margin-bottom: 8"& &&&&&&&&&&& &div& &&&&&&&&&&&&&&&& 这里放菜单 &&&&&&&&&&& &/div& &&&&&&& &/div& &&&&&&& &!--&& Menu Tag end --& &&&&&&& &div id="page-content" class="clearfix"& &&&&&&&&&&& &center& &&&&&&&&&&&&&&& &table width="100%" border="0" cellpadding="0" cellspacing="0"& &&&&&&&&&&&&&&&&&&& &tr& &&&&&&&&&&&&&&&&&&&&&&& &td& &&&&&&&&&&&&&&&&&&&&&&&&&&& &decorator:body /&&!-- 这里的内容由引用模板的子页面来替换 --& &&&&&&&&&&&&&&&&&&&&&&& &/td& &&&&&&&&&&&&&&&&&&& &/tr& &&&&&&&&&&&&&&& &/table& &&&&&&&&&&& &/center& &&&&&&& &/div& &&&&&&& &!-- end content --& &&&&&&& &div id="page-footer" class="clearfix"& &&&&&&&&&&&& 这里放页面底部 &&&&&&&&&&& &!-- end footer --& &&&&&&& &/div& &&&&&&& &!-- end page --& &&& &/body& &/html& 这就是个简单的模板,页面的头和脚都由模板里的静态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"& &&&&&&& &pattern&/*&/pattern& &&& &/decorator& &/decorators& decorators.xml有两个主要的结点: &&&&&& decorator结点指定了模板的位置和文件名,通过pattern来指定哪些路径引用哪个模板 &&&&&& excludes结点则指定了哪些路径的请求不使用任何模板 如上面代码,/index.jsp和凡是以/login/开头的请求路径一律不使用模板; 另外还有一点要注意的是:decorators结点的defaultdir属性指定了模板文件存放的目录; 六、实战感受 &&&&& 刚刚做完一个用到sitemesh的项目,跟以前用tiles框架相比,最大的感受就是简单,系统设计阶段 就把模板文件和sitemesh框架搭好了!哪些页面使用框架哪些不使用,全部都通过UI Demo很快就定义出来了; 在接下来的开发中所有成员几乎感受不到sitemesh的存在,各自仅仅关心自己的模块功能实现; 七、总结 &&& 使用sitemesh给我们带来的是不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务 逻辑,而不是整个页面的风格和结构。它让我们摆脱了大量用include方式复用页面尴尬局面,也避免了tiles 框架在团队开发中的复杂度,它还提供了很大的灵活性以及给我们提供了整合异构Web系统页面的一种方案
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1883298次
积分:18538
积分:18538
排名:第371名
原创:279篇
转载:204篇
评论:404条
(7)(1)(1)(2)(11)(5)(3)(6)(10)(7)(1)(8)(7)(4)(2)(2)(6)(3)(10)(7)(4)(5)(6)(4)(6)(6)(8)(8)(10)(4)(2)(11)(2)(21)(2)(8)(9)(9)(13)(6)(3)(4)(9)(6)(5)(2)(7)(1)(1)(1)(4)(1)(1)(1)(11)(5)(12)(6)(3)(1)(7)(4)(1)(1)(2)(2)(7)(7)(4)(2)(1)(3)(1)(2)(20)(32)(19)(13)(11)(5)(11)(8)

我要回帖

更多关于 一键超频功能760 的文章

 

随机推荐