sitemesh实例教程

2021-03-21 15:48 jianzhan

1,基础定义

1,Sitemesh是1种网页页面装饰设计技术性 :

 1  :它根据过虑器(filter)来阻拦网页页面浏览
 2  :依据被浏览网页页面的URL寻找适合的装饰设计模版
 3  :提取被浏览网页页面的內容,放到装饰设计模版融新适的部位
 4  :最后将装饰设计后的网页页面推送给顾客端。

2,在sitemesh中,网页页面分成两种:装饰设计模版和一般网页页面。
1)装饰设计模版,是指用于装饰其它网页页面的网页页面。
2)一般网页页面,1般指各种各样运用网页页面。
3,接下来,大家根据1个简易的事例来讲明1下sitemesh装饰网页页面的基础基本原理。

2,模版装饰网页页面的基本原理







根据Sitemesh的申请注册体制,告知Sitemesh,当浏览该相对路径时应用XXX模版(假设应用前面那个模版)来装饰被浏览网页页面。 

 

当客户在左侧导航栏栏点一下“戏说万里长城”( /ShowGreatWall.do)时,右侧的“戏说万里长城”网页页面可能被特定的模版装饰



总结上面全过程,Sitemesh装饰网页页面的基础基本原理,能够根据下面来讲明:



3,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的1个事例以下:

拷贝编码
编码以下:

<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)大家看1个装饰模版的事例

拷贝编码
编码以下:

<%@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)大家看1个被装饰的网页页面的事例:

拷贝编码
编码以下:

<%@ page contentType="text/html;?charset=GBK"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<p>Decorated page goes here.</p
</body>
</html>

5)大家看1下装饰设计模版中可使用的Sitemesh标识 

<decorator:head />

 取下被装饰设计网页页面的head标识中的內容。

<decorator:body />

取下被装饰设计网页页面的body标识中的內容。

<decorator:title default=""  />

取下被装饰设计网页页面的title标识中的內容。default为默认设置值

<decorator:getProperty property="" default=""  writeEntireProperty=""/>

取下被装饰设计网页页面有关标识的特性值。

writeEntireProperty说明,是显示信息特性的值還是显示信息“特性=值”

Html标识的特性
Body标识的特性
Meta标识的特性

留意假如其content值中包括“>或<”会出错,需转码,比如&lt;这些

default是默认设置值

<decorator:usePage id="" />

 将被装饰设计网页页面结构为1个目标,能够在装饰设计网页页面的JSP中立即引入

6)看1个在装饰设计模版中应用标识的事例

拷贝编码
编码以下:

<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)看1下相应的在被装饰网页页面中的编码:

拷贝编码
编码以下:

<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>这是1个被装饰网页页面</p>
</body>
</html>

4,总结

1,Sitemesh最为关键的便是做用于装饰的模版,并在decorators.xml中配备这些模版用于装饰哪些网页页面。因而应用Sitemesh的关键全过程便是:做装饰设计模版,随后在decorators.xml中配备URL Pattern

2,剖析全部工程项目,看哪些网页页面必须抽象性成模版,比如2级网页页面、3级网页页面、弹出对话框这些将会都必须做成相应的模版,1般来讲,1个大中型的OA系统软件,模版不容易超出8个。

— — —— — — — — — — — — — — — — — — — — — — — — —

假如某个独特的要求恳求相对路径在过虑器的范畴内,但又不想应用模版如何办?
你总不可以这么不讲道理吧!

大伙儿安心吧,SiteMesh早就考虑到到这1点了,上面第5步说道的decorators.xml这个情况下就起到功效了!       
下面是我的decorators.xml

拷贝编码
编码以下:

<?xml version="1.0" encoding="ISO⑻859⑴"?>
<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/开始的恳求相对路径1律不应用模版;

此外也有1点要留意的是:decorators结点的defaultdir特性特定了模版文档储放的文件目录;