seasun
在不断模仿、思考、总结中一步一步进步!
公告
我的blog中的部分资源是来自于网络上,如果您认为侵犯了您的权利,请及时联系我
,
我会尽快删除!E-MAIL:shiwenfeng@aliyun.com和QQ:281340916,欢迎交流。
日历
<
2009年10月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
导航
BlogJava
首页
发新随笔
发新文章
联系
聚合
管理
常用链接
我的随笔
我的评论
我的参与
最新评论
随笔分类
1. java framework--------
(rss)
1.01 spring(1)
(rss)
1.02 struts2(2)
(rss)
1.03 hibernate(1)
(rss)
1.04 jsf
(rss)
1.05 jbpm(2)
(rss)
1.06 appfuse(4)
(rss)
1.07 springsecurity
(rss)
1.08 sitemesh(3)
(rss)
1.09 displaytag(4)
(rss)
1.10 struts-menu(1)
(rss)
1.11 springside
(rss)
1.12 junit-test(1)
(rss)
1.13 jasperreports(2)
(rss)
1.14 jfreechar(1)
(rss)
1.15 guice(3)
(rss)
2. ajax----------------------
(rss)
2.1 dwr(1)
(rss)
2.2 jQuery(1)
(rss)
2.3 dojo
(rss)
2.4 ext2
(rss)
3. apache commons------
(rss)
3.1 StringUtils
(rss)
3.2 CollectionUtils
(rss)
3.3 ToStringBuild
(rss)
3.4 ObjetUtils
(rss)
3.5 DateUtils
(rss)
3.6 BeanUtils(2)
(rss)
3.7 Digester(1)
(rss)
4. project manager tools
(rss)
4.1 ant
(rss)
4.2 maven
(rss)
4.3 JUID
(rss)
4.4 Mindject
(rss)
4.5 UML(1)
(rss)
4.6 Rose
(rss)
4.7 Together
(rss)
5. ide tools-----------------
(rss)
5.1 eclipse3.4
(rss)
5.2 myeclipse7.1
(rss)
5.3 idea
(rss)
5.4 netbean
(rss)
6. web service-------(1)
(rss)
7. java website---------(1)
(rss)
8. design pattern---------
(rss)
8.1 introduction(1)
(rss)
9. UI-------
(rss)
9.1 javascript
(rss)
9.2 css
(rss)
9.3 html
(rss)
9.4 web effect
(rss)
a).web container-------
(rss)
a.1 tomcat
(rss)
a.2 resin
(rss)
b).java other------(1)
(rss)
good blog author
IT民工
jelver
KentySky
superleo
wayne
刘文涛
庄周梦蝶
梧桐雨
爱尔兰咖啡
诗特林
隔叶黄莺
积分与排名
积分 - 81283
排名 - 698
最新评论
1. re: Beanutils基本用法[未登录]
1231231231312
--123
2. re: DisplayTag导出Excel的处理过程
sdfsfsd
--fgbsf
3. re: Beanutils基本用法
威威威威
--谔谔
4. 求解BeanUtils的求解.populate(arg0, arg1)方法
评论内容较长,点击标题查看
--毛耿宁
5. re: DisplayTag导出Excel的处理过程
斯蒂芬都算
--34
阅读排行榜
1. Beanutils基本用法(43685)
2. Spring3.0带来的新特性(4697)
3. DWR3.0 文件上传(4365)
4. DisplayTag导出Excel的处理过程(4034)
5. guice和spring的整合(2657)
6. web service之框架比较CXF xfire aisx2 aisx(2554)
7. JasperReports概述和运行原理(2189)
8. HQL动态查询(2059)
9. Struts2和SiteMesh整合之web.xml(1386)
10. maven构建appfuse常用命令(1334)
11. 初识SiteMesh(1313)
12. BeanUtils之集合排序(938)
13. 揭秘jbpm流程引擎内核设计思想及构架(857)
14. sitemesh技术的应用(793)
15. Display Tag使用(723)
16. guice和struts2的整合(662)
17. displaytag.properties 文件的详细说明(646)
18. jbpm涉及到的几个重要概念及常用API(644)
19. JasperReport的Samples介绍和学习(628)
20. 初识appfuse(537)
sitemesh技术的应用
一、基本概念
1、Sitemesh是一种页面装饰技术 :
1
:它通过过滤器(filter)来拦截页面访问
2
:根据被访问页面的URL找到合适的装饰模板
3
:
提取被访问页面的内容,放到装饰模板中合适的位置
4
:最终将
装饰后的页面
发送给客户端。
2、在sitemesh中,页面分为两种:装饰模板和普通页面。
1)装饰模板,是指用于修饰其它页面的页面。
2)普通页面,一般指各种应用页面。
二、模板修饰网页的原理
通过Sitemesh的注册机制,告诉Sitemesh,当访问该路径时使用XXX模板(假定使用前面那个模板)来修饰被访问页面。
当用户在左边导航栏点击“戏说长城”( /ShowGreatWall.do)时,右边的“戏说长城”页面将会被指定的模板修饰
总结上面过程,Sitemesh修饰网页的基本原理,可以通过下面来说明:
三、Sitemesh的配置与使用
1)WEB-INF/web.xml中加入filter定义与sitemesh的taglib定义
<
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>
<taglib>
<taglib-uri>sitemesh-decorator</taglib-uri>
<taglib-location>/WEB-INF/sitemesh-decorator.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>sitemesh-page</taglib-uri>
<taglib-location>/WEB-INF/sitemesh-page.tld</taglib-location>
</taglib>
2)创建WEB-INF/decorators.xml,在该文件中配置有哪些模板,以及每个模板具体修饰哪些URL,另外也可以配置哪些URL不需要模板控制 , decorators.xml的一个例子如下:
<
excludes
>
<
pattern
>
/Login*
</
pattern
>
</
excludes
>
<
decorators
defaultdir
="/decorators"
>
<
decorator
name
="main"
page
=“DecoratorMainPage.jsp">
<pattern
>
/*
</
pattern
>
</
decorator
>
<
decorator
name
=“pop"
page
=“PopPage.jsp">
<pattern
>
/showinfo.jsp*
</
pattern
>
<
pattern
>
/myModule/GreatWallDetailAction.do*
</
pattern
>
</
decorator
>
</
decorators
>
3)我们看一个修饰模板的例子
<
%@page
contentType
="text/html;?charset=GBK"
%
>
<
%@taglib
uri
="sitemesh-decorator"
?prefix
="decorator"
%
>
<
html
>
<
head
>
<
title
>
<
decorator:title
/>
</
title
>
<
decorator:head
/>
</
head
>
<
body
>
Hello World
<
hr
/>
<
decorator:body
/>
</
body
>
</
html
>
4)我们看一个被修饰的页面的例子:
<
%@ page
contentType
="text/html;?charset=GBK"
%
>
<
html
>
<
head
>
<
title
>
Hello World
</
title
>
</
head
>
<
body
>
<
p
>
Decorated page goes here.
</
p
</body
>
</
html
>
5)我们看一下装饰模板中可以使用的Sitemesh标签
<
decorator:head
/>
取出被装饰页面的head标签中的内容。
<
decorator:body
/>
取出被装饰页面的body标签中的内容。
<
decorator:title
default
="
"
/>
取出被装饰页面的title标签中的内容。default为默认值
<
decorator:getProperty
property
="
"
default
="
"
writeEntireProperty
="
"
/>
取出被装饰页面相关标签的属性值。
writeEntireProperty表明,是显示属性的值还是显示“属性=值”
Html标签的属性
Body标签的属性
Meta标签的属性
注意如果其content值中包含“>或
<
”会报错,需转码,例如<
;等等
default是默认值
<
decorator:usePage
id
="
"
/>
将被装饰页面构造为一个对象,可以在装饰页面的JSP中直接引用
。
6)看一个在装饰模板中使用标签的例子
<
html
lang
=“
<decorator:getProperty
property
=‘lang’/>
”>
<head
>
<
title
>
<
decorator:title
default
=“你好”
/>
</
title
>
<
decorator:head
/>
</
head
>
<
body
<decorator:getProperty property
=“body.onload"
writeEntireProperty
=“1"/>
>
从meta中获取变量company的名称:
<decorator:getProperty property
=“meta.company”/>
下面是被修饰页面的body中的内容:
<decorator:body
/>
<
decorator:usePage
id
=“myPage"
/>
<
%=myPage
.getRequest().getAttribute(“username”)%
>
</
body
>
</
html
>
7)看一下相应的在被修饰页面中的代码:
<
html
lang
=“en”>
<head
>
<
title
>
我的sitemesh
</
title
>
<
meta
name
=“company”
content
=“smartdot”/>
<meta name
=“Author”
content
=“zhangsan”/>
<script
>
function count(){return 10;}
</
script
>
</
head
>
<
body
onload
=“count()”>
<p
>
这是一个被修饰页面
</
p
>
</
body
>
</
html
>
四、总结
1,Sitemesh最为重要的就是做用于修饰的模板,并在decorators.xml中配置这些模板用于修饰哪些页面。因此使用Sitemesh的主要过程就是:
做装饰模板
,然后
在decorators.xml中配置URL Pattern
2,分析整个工程,看哪些页面需要抽象成模板,例如二级页面、三级页面、弹出窗口等等可能都需要做成相应的模板,一般来说,一个大型的OA系统,模板不会超过8个。
如果某个特殊的需求请求路径在过滤器的范围内,但又不想使用模板怎么办?
你总不能这么不讲道理吧!
大家放心吧,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属性指定了模板文件存放的目录;
posted on 2009-10-28 13:47
shiwf
阅读(793)
评论(0)
编辑
收藏
所属分类:
1.08 sitemesh
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Struts2和SiteMesh整合之web.xml
sitemesh技术的应用
初识SiteMesh
Copyright © shiwf
Powered by:
博客园
模板提供:
沪江博客