SiteMesh框架统一布局用法介绍
2017-07-11 11:58
357 查看
SiteMesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术。
2,然后将经过装饰后的页面送回浏览者.对于被装饰的页面而言,它无需知道自身被谁装饰,也无从知道自身被谁装饰,SiteMesh通过配置文件来配置指定的装饰器,用于过滤某些页面,则该装饰器会装饰这些页面,从而提供更好的页面效果。
3,通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需使用include指令来显式包含装饰效果,目标页面与装饰页面完全分高.提供更好的解耦,而且可以应用中所有的页面都使用相同的装饰页面,整个Web应用会有更统一的风格,会提供更好的整体效果.
简单来说,Sitemesh的流程就是:通过Filter来截取request和response,然后给原始的页面加入一定的装饰,再把结果返回给客户端.
结构图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/a8ad3dd9d380044e4b9b0e598658fefe)
SiteMesh的官方网站:http://wiki.sitemesh.org/wiki/display/sitemesh/Home
1,新建一个maven工程,在pom.xml中配置如下:
2,在web.xml中配置SiteMesh的过滤器:
3,在WEB-INF下,也就是和web.xml同级目录下新建一个sitemesh3.xml,这里来配置哪些展示页面用此框架来修饰,哪些不用此框架来修饰,也是类似前台页面的过滤器:
这是比较简单的配置,指明除根目录下的所有页面,除去/no_mytest*下的页面,都要被pub.jsp页面去修饰。
更多的配置:
a,默认情况下, sitemesh 只对 HTTP 响应头中 Content-Type 为 text/html 的类型进行拦截和装饰,那么如果我们想对其他的页面也进行修饰,我们应该添加更多的响应头:
b,如果我们不想网站仅仅只使用一套的装饰器,不同的模块想要用不同的装饰器,那么我们可以将不同的路径使用不同的装饰器:
4,定义一个母版页,也就是用该页面做统一布局页面:
<sitemesh:title/>: 会自动替换为被过滤页面的title。
<sitemesh:head/>: 会把被过滤页面head里面的东西(除了title)放在这个地方。
<sitemesh:body/> :被过滤的页面body里面的内容放在这里。
头部引入js和css以及div中的内容,都可以在其他重用,在被过滤页面都是可见的,而且还有一个好处,只需要定义好pub页面的样式即可。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/9326178cd68620a0a5af2e7aacf8f32b)
Sitemesh 3 默认只提供了 body,title,head 等HTML常用的标签 类型,我们在实际开发中,HTML页面往往需要用到很多自定义的标签,那么 我们可以通过实现 TagRuleBundle 类来扩展自定义的标签。
自定义标签使用流程:
1,实现 TagRuleBundle类:
2,在sitemesh3.xml 配置文件中进行配置:
介绍:
1,SiteMesh是OpenSymphony团队开发的JEE框架之一,它是一个非常优秀的页面装饰器框架。它通过对所有的用户请求进行过滤,并对服务器向客户端响应也进行过滤,从而给原始的服务器响应加入一定的装饰,可以是header,footer等。2,然后将经过装饰后的页面送回浏览者.对于被装饰的页面而言,它无需知道自身被谁装饰,也无从知道自身被谁装饰,SiteMesh通过配置文件来配置指定的装饰器,用于过滤某些页面,则该装饰器会装饰这些页面,从而提供更好的页面效果。
3,通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需使用include指令来显式包含装饰效果,目标页面与装饰页面完全分高.提供更好的解耦,而且可以应用中所有的页面都使用相同的装饰页面,整个Web应用会有更统一的风格,会提供更好的整体效果.
简单来说,Sitemesh的流程就是:通过Filter来截取request和response,然后给原始的页面加入一定的装饰,再把结果返回给客户端.
结构图
SiteMesh的官方网站:http://wiki.sitemesh.org/wiki/display/sitemesh/Home
使用流程:
可以网上下载SiteMesh3.0的jar包,这里介绍使用Maven。1,新建一个maven工程,在pom.xml中配置如下:
<!-- 网页布局的前端框架 --> <dependency> <groupId>org.sitemesh</groupId> <artifactId>sitemesh</artifactId> <version>3.0.0</version> </dependency>
2,在web.xml中配置SiteMesh的过滤器:
<!-- 网页布局前端框架的过滤器 --> <filter> <filter-name>sitemesh</filter-name> <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3,在WEB-INF下,也就是和web.xml同级目录下新建一个sitemesh3.xml,这里来配置哪些展示页面用此框架来修饰,哪些不用此框架来修饰,也是类似前台页面的过滤器:
<?xml version="1.0" encoding="UTF-8"?> <sitemesh> <!-- 指明满足“/*”的页面,将被“/pub.jsp”所装饰 --> <mapping path="/*" decorator="/pub.jsp" /> <!-- 指明满足“/no_mytest*”的页面,将被排除,不被装饰 --> <mapping path="/no_mytest*" exclue="true" /> </sitemesh>
这是比较简单的配置,指明除根目录下的所有页面,除去/no_mytest*下的页面,都要被pub.jsp页面去修饰。
更多的配置:
a,默认情况下, sitemesh 只对 HTTP 响应头中 Content-Type 为 text/html 的类型进行拦截和装饰,那么如果我们想对其他的页面也进行修饰,我们应该添加更多的响应头:
<mime-type>text/html</mime-type> <mime-type>application/vnd.wap.xhtml+xml</mime-type> <mime-type>application/xhtml+xml</mime-type>
b,如果我们不想网站仅仅只使用一套的装饰器,不同的模块想要用不同的装饰器,那么我们可以将不同的路径使用不同的装饰器:
<mapping path="/admin/*" decorator="/another-decorator.html" /> <mapping path="/*.special.jsp" decorator="/special-decorator.html" />c,对同一路径下的不同页面也可以使用不同的装饰器:
<mapping> <path>/articles/*</path> <decorator>/decorators/article.html</decorator> <decorator>/decorators/two-page-layout.html</decorator> <decorator>/decorators/common.html</decorator> </mapping>
4,定义一个母版页,也就是用该页面做统一布局页面:
<%@ 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><sitemesh:write property='title' /></title> <sitemesh:write property='head' /> </head> <body> <center> <sitemesh:write property='title' /> <br /> <sitemesh:write property='body' /> </center> <div style="float:left"> <ul> <li><a href="index.jsp">菜单管理</a></li> <li><a href="list.jsp">用户管理</a></li> <li><a href="no_mytest/list.jsp">角色管理</a></li> </ul> </div> </body> </html>
<sitemesh:title/>: 会自动替换为被过滤页面的title。
<sitemesh:head/>: 会把被过滤页面head里面的东西(除了title)放在这个地方。
<sitemesh:body/> :被过滤的页面body里面的内容放在这里。
头部引入js和css以及div中的内容,都可以在其他重用,在被过滤页面都是可见的,而且还有一个好处,只需要定义好pub页面的样式即可。
适用场景:
使用SiteMesh框架可以较快捷的开发页面要求统一简洁的网站,例如管理系统,网站后台等非灵活网站,前端页面管理可以类似浏览器的tag,如图:扩展:
如何使用的自定义标签?Sitemesh 3 默认只提供了 body,title,head 等HTML常用的标签 类型,我们在实际开发中,HTML页面往往需要用到很多自定义的标签,那么 我们可以通过实现 TagRuleBundle 类来扩展自定义的标签。
自定义标签使用流程:
1,实现 TagRuleBundle类:
public class MyTagRuleBundle implements TagRuleBundle { @Override public void install(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) { defaultState.addRule("myHeader", new ExportTagToContentRule(contentProperty.getChild("myHeader"), false)); } @Override public void cleanUp(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) { } }
2,在sitemesh3.xml 配置文件中进行配置:
<content-processor> <tag-rule-bundle class="com.test.MyTagRuleBundle" /> </content-processor>
相关文章推荐
- sitemesh框架对页面进行布局和装饰
- CSS布局对象之Layout 用法介绍
- 黑马程序员——Foundation框架NSFileManager介绍和用法
- yii2框架dropDownList的下拉菜单用法介绍
- OkHttp3-Android网络请求框架常用用法介绍与实例(mob请求天气预报)
- [置顶] iOS开发——布局框架Masonry的介绍与使用
- JSP布局框架 SiteMesh
- 自动布局框架Masonry介绍与使用实践:快速上手Autolayout [转载]
- ios 自动布局框架介绍
- 从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件
- 页面布局框架--sitemesh
- Objective-C之Foundation框架NSNumber、NSNull、NSValue、NSDate用法介绍
- SiteMesh框架的用法。。。。。
- iOS- Masonry自动布局框架介绍与使用实践
- sitemesh 页面布局框架
- SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架
- Signals框架介绍(一)基本用法
- SiteMesh的介绍用法及原理
- sitemesh布局框架学习
- Android HTTP网络通信(二):Volley框架——介绍、基本用法