SiteMesh在JSP中页面装饰

转自:http://javauu.com/thread-36-1-1.html

、SiteMesh在JSP中页面装饰

一、SiteMesh在JSP页面中使用
通常情况下,在一个工程中,我们不得不使用include标签在每个jsp页面中来包含各种header, stylesheet, scripts, footer。现在,在sitemesh的帮助下,不需要在每个页面中使用include标签,并可实现相同效果。

二、SiteMesh在JSP页面中使用实例
接下来,完成一个SiteMesh与JSP结合的实例,并且添加打印装饰。


  • 将sitemesh-2.3.jar放 到 [web-app]/WEB-INF/lib目录下;
  • 在[web-app]/WEB-INF/新建一个decorators.xml文件,包含以下内容:
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <decorators defaultdir="/decorators">  
    3.     <!-- 此处用来定义不需要过滤的页面 -->  
    4.     <excludes>  
    5.      <!-- 过滤掉error.jsp页面 -->  
    6.      <pattern>/error.jsp</pattern>  
    7.     </excludes>  
    8.   
    9.  <!-- 用来定义装饰器要过滤的页面 -->  
    10.     <decorator name="main" page="main.jsp">  
    11.         <pattern>/*</pattern>  
    12.     </decorator>  
    13.  <!-- 用来定义装饰器要过滤的打印页面 -->  
    14.     <decorator name="printable1" page="printable1.jsp"/>  
    15. </decorators>  
    <?xml version="1.0" encoding="utf-8"?>
    <decorators defaultdir="/decorators">
        <!-- 此处用来定义不需要过滤的页面 -->
        <excludes>
         <!-- 过滤掉error.jsp页面 -->
         <pattern>/error.jsp</pattern>
        </excludes>
    
     <!-- 用来定义装饰器要过滤的页面 -->
        <decorator name="main" page="main.jsp">
            <pattern>/*</pattern>
        </decorator>
     <!-- 用来定义装饰器要过滤的打印页面 -->
        <decorator name="printable1" page="printable1.jsp"/>
    </decorators>
  • 在/WEB-INF/新建一个sitemesh.xml文件,包含内容如下:
    1. <sitemesh>  
    2.  <property name="decorators-file" value="/WEB-INF/decorators.xml" />  
    3.  <excludes file="${decorators-file}" />  
    4.  <!-- Page Parsers :负责读取stream的数据到一个Page对象中以被SiteMesh解析和操作。-->  
    5.  <page-parsers>  
    6.  <parser default="true"  
    7.  class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />  
    8.  <parser content-type="text/html"  
    9.  class="com.opensymphony.module.sitemesh.parser.FastPageParser" />  
    10.  <parser content-type="text/html;charset=utf-8"  
    11.  class="com.opensymphony.module.sitemesh.parser.FastPageParser" />  
    12.  </page-parsers>  
    13.   
    14.  <decorator-mappers>  
    15.  <!-- 可打印的装饰器,可以允许你当用http://localhost/test.html?printable=true方式访问时给出原始页面以供打印 -->  
    16.  <!-- 其中printable1 与 decorators.xml中的装饰器printable1一致进行映射,若不添加此段,默认为printable -->  
    17.  <mapper  
    18.  class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">  
    19.  <param name="decorator" value="printable1" />  
    20.  <param name="parameter.name" value="printable" />  
    21.  <param name="parameter.value" value="true" />  
    22.  </mapper>  
    23.  <mapper  
    24.  class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">  
    25.  <param name="config" value="${decorators-file}" />  
    26.  </mapper>  
    27.  </decorator-mappers>  
    28. </sitemesh>  
    <sitemesh>
     <property name="decorators-file" value="/WEB-INF/decorators.xml" />
     <excludes file="${decorators-file}" />
     <!-- Page Parsers :负责读取stream的数据到一个Page对象中以被SiteMesh解析和操作。-->
     <page-parsers>
     <parser default="true"
     class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />
     <parser content-type="text/html"
     class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
     <parser content-type="text/html;charset=utf-8"
     class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
     </page-parsers>
    
     <decorator-mappers>
     <!-- 可打印的装饰器,可以允许你当用http://localhost/test.html?printable=true方式访问时给出原始页面以供打印 -->
     <!-- 其中printable1 与 decorators.xml中的装饰器printable1一致进行映射,若不添加此段,默认为printable -->
     <mapper
     class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
     <param name="decorator" value="printable1" />
     <param name="parameter.name" value="printable" />
     <param name="parameter.value" value="true" />
     </mapper>
     <mapper
     class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
     <param name="config" value="${decorators-file}" />
     </mapper>
     </decorator-mappers>
    </sitemesh>
  • 在[web-app]/WEB-INF/web.xml添加以下内容:
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app id="WebApp_ID" version="2.4"  
    3.  xmlns="http://java.sun.com/xml/ns/j2ee"  
    4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    5.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd[/url]">  
    6.  <display-name>SiteMeshDemoL2</display-name>  
    7.  <filter>  
    8.  <filter-name>sitemesh</filter-name>  
    9.  <filter-class>  
    10.  com.opensymphony.module.sitemesh.filter.PageFilter   
    11.  </filter-class>  
    12.  </filter>  
    13.   
    14.  <filter-mapping>  
    15.  <filter-name>sitemesh</filter-name>  
    16.  <url-pattern>/*</url-pattern>  
    17.  </filter-mapping>  
    18.  <welcome-file-list>  
    19.  <welcome-file>index.jsp</welcome-file>  
    20.  </welcome-file-list>  
    21. </web-app>  
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee [url]http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd[/url]">
     <display-name>SiteMeshDemoL2</display-name>
     <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>
     <welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
    </web-app>
  • 在[web-app]下创建一个decorators文件夹,在该文件下再创建一个装饰页面main.jsp,包含以下内容:
    1. <%@ page language="java" contentType="text/html; charset=utf-8"  
    2.     pageEncoding="utf-8"%>  
    3. <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>  
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    5. <html>  
    6.  <head>  
    7.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    8.  <title><decorator:title default="默认title"/>--javauu.com</title>  
    9.  <decorator:head/>  
    10.  </head>  
    11.     
    12.  <body>  
    13.    <div id="header"><jsp:include page="header.jsp" flush="true"/></div>  
    14.    <div id="body"><decorator:body /></div>  
    15.    <p><small>(<a href="?printable=true">printable version</a>)</small></p>  
    16.    <div id="footer"><jsp:include page="footer.jsp" flush="true"/></div>  
    17.  </body>  
    18. </html>  
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
    <!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><decorator:title default="默认title"/>--javauu.com</title>
     <decorator:head/>
     </head>
     
     <body>
       <div id="header"><jsp:include page="header.jsp" flush="true"/></div>
       <div id="body"><decorator:body /></div>
       <p><small>(<a href="?printable=true">printable version</a>)</small></p>
       <div id="footer"><jsp:include page="footer.jsp" flush="true"/></div>
     </body>
    </html>
  • 在decorators文件夹下再创建一个装饰页面printable1.jsp,包含以下内容:
    1. <%@ page language="java" contentType="text/html; charset=utf-8"  
    2.     pageEncoding="utf-8"%>  
    3. <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>  
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    5. <html>  
    6.  <head>  
    7.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    8.  <title><decorator:title default="默认title"/>--javauu.com</title>  
    9.  <decorator:head/>  
    10.  </head>  
    11.     
    12.  <body>  
    13.    <h5>这是要打印的装饰页面,去掉header,footer</h5>  
    14.    <div id="body"><decorator:body /></div>  
    15.    <h5>打印...</h5>  
    16.  </body>  
    17. </html>  
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
    <!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><decorator:title default="默认title"/>--javauu.com</title>
     <decorator:head/>
     </head>
     
     <body>
       <h5>这是要打印的装饰页面,去掉header,footer</h5>
       <div id="body"><decorator:body /></div>
       <h5>打印...</h5>
     </body>
    </html>
  • 在decorators文件夹下再创建一个用于被装饰页面包含的header.jsp和footer.jsp,分别包含以下内容:
    1. <%@ page language="java" contentType="text/html; charset=utf-8"  
    2.     pageEncoding="utf-8"%>  
    3. <h1>全局统一header</h1>  
    4. <h2>好久没有人把牛皮吹的这么清新脱俗了!</h2>  
    5. <hr />  
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <h1>全局统一header</h1>
    <h2>好久没有人把牛皮吹的这么清新脱俗了!</h2>
    <hr />
    1. <%@ page language="java" contentType="text/html; charset=utf-8"  
    2.     pageEncoding="utf-8"%>  
    3. <hr />  
    4. <h1>全局统一footer</h1>  
    5. <h2>爸爸今天打了我两次,第一次是因为看见了我手里两分的成绩单,第二次是因为成绩单是他小时候的。</h2>  
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <hr />
    <h1>全局统一footer</h1>
    <h2>爸爸今天打了我两次,第一次是因为看见了我手里两分的成绩单,第二次是因为成绩单是他小时候的。</h2>
  • 在[web-app]下创建被装饰页面index.jsp,包含以下内容:
    1. <%@ page language="java" contentType="text/html; charset=utf-8"  
    2.     pageEncoding="utf-8"%>  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    4. <html>  
    5. <head>  
    6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    7. <title>index</title>  
    8. </head>  
    9. <body>  
    10.  <h1>被装饰过的首页</h1>  
    11.  <h2><a href="result.jsp">点击我</a>跳转到被装饰过结果页面!</h2>  
    12.  <h2><a href="error.jsp">点击我</a>跳转到被排除装饰的错误页面!</h2>  
    13.  <h2>有两个人掉到陷阱里了,死的人叫死人,活人叫什么? <a href="answer.jsp">答案</a></h2>  
    14. </body>  
    15. </html>  
    <%@ 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>index</title>
    </head>
    <body>
     <h1>被装饰过的首页</h1>
     <h2><a href="result.jsp">点击我</a>跳转到被装饰过结果页面!</h2>
     <h2><a href="error.jsp">点击我</a>跳转到被排除装饰的错误页面!</h2>
     <h2>有两个人掉到陷阱里了,死的人叫死人,活人叫什么? <a href="answer.jsp">答案</a></h2>
    </body>
    </html>
  • 在[web-app]下创建被装饰页面error.jsp,包含以下内容:
    1. <%@ page language="java" contentType="text/html; charset=utf-8"  
    2.     pageEncoding="utf-8"%>  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    4. <html>  
    5.  <head>  
    6.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    7.  <title>error</title>  
    8.  </head>  
    9.   
    10.  <body>  
    11.  <h1>错误页面!!!</h1>  
    12.  <h2>珍惜生活——上帝还让你活着,就肯定有他的安排。</h2>  
    13.  </body>  
    14. </html>  
    <%@ 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>error</title>
     </head>
    
     <body>
     <h1>错误页面!!!</h1>
     <h2>珍惜生活——上帝还让你活着,就肯定有他的安排。</h2>
     </body>
    </html>
  • 在[web-app]下创建被装饰页面answer.jsp,包含以下内容:

你可能感兴趣的:(html,xml,jsp,Web,浏览器)