[关闭]
@dzhai 2016-06-22T05:55:17.000000Z 字数 3070 阅读 1993

sitemesh3

Java

Sitemesh 3 简介

Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter
!

使用及配置说明

项目demo基于sitemesh-3.0.1

在pom添加依赖

  1. <dependency>
  2. <groupId>org.sitemesh</groupId>
  3. <artifactId>sitemesh</artifactId>
  4. <version>3.0.1</version>
  5. </dependency>

web.xml 添加拦截器

  1. <filter>
  2. <filter-name>sitemesh</filter-name>
  3. <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>sitemesh</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>

创建 sitemesh3.xm (默认在/WEB-INFO/sitemesh3.xml 必须是这个名字 Hard Code)

sitemesh3提供2种配置方式 java和xml,具体请看Configuring SiteMesh 3

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <sitemesh>
  3. <!--默认情况下, sitemesh 只对 HTTP 响应头中 Content-Type 为 text/html 的类型进行拦截和装饰, 我们可以添加更多的 mime 类型 -->
  4. <mime-type>text/html</mime-type>
  5. <mime-type>application/vnd.wap.xhtml+xml</mime-type>
  6. <mime-type>application/xhtml+xml</mime-type>
  7. <!-- 默认装饰器,当下面的路径都不匹配时,启用该装饰器进行装饰 -->
  8. <mapping decorator="/defaulmain.jsp"/>
  9. <!-- 指明满足"*.jsp"的页面,将被"main.jsp"所装饰 -->
  10. <mapping path="*.jsp" decorator="/views/sitemesh3/main.jsp" />
  11. <!-- 指明满足"/exclude.jsp*"的页面,将被排除,不被装饰 -->
  12. <mapping path="/exclude.jsp" exclue="true" />
  13. <!-- 自定义标签 -->
  14. <content-processor>
  15. <tag-rule-bundle class="com.github.dzhai.sitemesh.tag.HeaderTagRuleBundle" />
  16. <tag-rule-bundle class="com.github.dzhai.sitemesh.tag.FooterTagRuleBundle" />
  17. </content-processor>
  18. </sitemesh>

创建模板文件 main.jsp

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title><sitemesh:write property='title' /> -sitemesh</title>
  6. <sitemesh:write property='head' />
  7. </head>
  8. <body>
  9. <header>header - <sitemesh:write property='header' /></header>
  10. <sitemesh:write property='body' />
  11. <footer>footer - <sitemesh:write property='footer' /></footer>
  12. </body>
  13. </html>

创建 具体页面index.jsp

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <html>
  3. <head>
  4. <title>index页面标题</title>
  5. <script type="text/javascript">
  6. alert('script');
  7. </script>
  8. </head>
  9. <body>
  10. <header>my header</header>
  11. <h2>Hello World!</h2>
  12. <footer>my footer</footer>
  13. </body>
  14. </html>

自定义tag

FooterTagRuleBundle

  1. public class FooterTagRuleBundle implements TagRuleBundle {
  2. @Override
  3. public void install(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
  4. defaultState.addRule("footer",
  5. new ExportTagToContentRule(siteMeshContext, contentProperty.getChild("footer"), false));
  6. }
  7. @Override
  8. public void cleanUp(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
  9. }
  10. }

HeaderTagRuleBundle

  1. public class HeaderTagRuleBundle implements TagRuleBundle {
  2. @Override
  3. public void install(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
  4. defaultState.addRule("header",
  5. new ExportTagToContentRule(siteMeshContext, contentProperty.getChild("header"), false));
  6. }
  7. @Override
  8. public void cleanUp(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) {
  9. }
  10. }

运行项目 访问 index.jsp

!此处输入图片的描述
生成html源码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>index页面标题 -sitemesh</title>
  5. <script type="text/javascript">
  6. alert('script');
  7. </script>
  8. </head>
  9. <body>
  10. <header>header - my header</header>
  11. <h2>Hello World!</h2>
  12. <footer>footer - my footer</footer>
  13. </body>
  14. </html>
  1. Sitemesh官网地址
  2. Sitemesh 3 的使用及配置
  3. Sitemesh VS Apache Tiles
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注