2020-08-05

siteMesh3 官方文档的简单翻译

只是简单的翻译了部分觉得有用的内容

http://wiki.sitemesh.org/wiki/display/sitemesh3/Getting+Started+with+SiteMesh+3

在Web应用程序中,SiteMesh充当服务者过滤器。它允许Servlet引擎正常处理请求,但是生成的HTML(称为内容)将在返回给浏览器之前被拦截。

截获的内容具有提取的某些属性(通常是<title>,<head>和<body>标记的内容,然后传递给第二个请求,该请求应返回该站点的通用外观(称为装饰器)。装饰器包含占位符,用于将从内容提取的属性插入到这些占位符。

在幕后,SiteMesh体系结构的关键组件是内容处理器。这是用于从HTML内容转换和提取内容的高效引擎。对于大多数用户来说,可以使用它,但也可以定义自己的转换和提取规则。

SiteMesh不在乎使用什么技术来生成内容或装饰器。它们可能是静态文件,Servlet,JSP,其他过滤器,MVC框架等。只要由Servlet引擎提供服务,SiteMesh便可以使用它。

依存关系

运行SiteMesh3至少需要:

JDK 1.5
符合Servlet 2.5的容器
SiteMesh运行时库

应该下载SiteMesh库并将其放在/ WEB-INF / lib /中。http://github.com/sitemesh/sitemesh3/downloads

Insert the SiteMesh Filter in /WEB-INF/web.xml

<web-app>

  ...

  <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>

</web-app>

创建一个装饰器

装饰器包含应应用于Web应用程序中的页面的通用布局和样式。 它是一个模板,其中包含内容的<title>,<head>和<body>元素的占位符。

至少应包含:

<html>
  <head>
    <title><sitemesh:write property='title'/></title>
    <sitemesh:write property='head'/>
  </head>
  <body>
    <sitemesh:write property='body'/>
  </body>
</html>

SiteMesh将重写<sitemesh:write property ='...'/>标记,以包括从内容中提取的属性。 可以从内容中提取更多属性,并且可以定义自己的规则-这将在另一篇教程中介绍。

最低限度的装饰器不是很有用。 让我们添加一些样式和一些常见的布局。

在您的网络应用程序中创建文件/decorator.html,其中包含:

<html>
  <head>
    <title>SiteMesh example: <sitemesh:write property='title'/></title>
    <style type='text/css'>
      /* Some CSS */
     body { font-family: arial, sans-serif; background-color: #ffffcc; }
     h1, h2, h3, h4 { text-align: center; background-color: #ccffcc;
                      border-top: 1px solid #66ff66; }
     .mainBody { padding: 10px; border: 1px solid #555555; }
     .disclaimer { text-align: center; border-top: 1px solid #cccccc;
                   margin-top: 40px; color: #666666; font-size: smaller; }
    </style>
    <sitemesh:write property='head'/>
  </head>
  <body>

    <h1 class='title'>SiteMesh example site: <sitemesh:write property='title'/></h1>

    <div class='mainBody'>
      <sitemesh:write property='body'/>
    </div>

    <div class='disclaimer'>Site disclaimer. This is an example.</div>

  </body>
</html>

在此示例中,装饰器是一个静态的.html文件,但是如果您希望装饰器更加动态,可以使用JSP,FreeMarker等技术。 SiteMesh不在乎-它只需要Servlet引擎可以提供内容的路径。

配置

需要对SiteMesh进行配置,以了解此装饰器及其应如何处理。

配置文件应该在/WEB-INF/sitemesh3.xml中创建:

<sitemesh>
  <mapping path="/*" decorator="/decorator.html"/>
</sitemesh>

这告诉SiteMesh,与路径/ *匹配的请求(即所有请求)都应使用我们刚刚创建的/decorator.html装饰。

如果您不喜欢必须使用XML来配置SiteMesh的想法,请不必担心-存在其他机制,包括直接在WEB-INF / web.xml中,以编程方式通过Java API,通过Spring,通过命名约定, 或您选择插入的任何自定义方式。这些将在另一篇文章中进一步说明。

创建一些内容

现在创建一些内容。 这是用纯HTML内容定义的。 创建/hello.html:

<html>
  <head>
    <title>Hello World</title>
    <meta name='description' content='A simple page'>
  </head>
  <body>
    <p>Hello <strong>world</strong>!</p>
  </body>
</html>

与装饰器一样,内容可以是静态文件,也可以由Servlet引擎(例如JSP)动态生成。

The result

Pointing your browser to http://myserver/hello.html will serve the content you just created, with the decorator applied. The resulting merged HTML will look like this:

<html>
  <head>
    <title>SiteMesh example: Hello World</title>
    <style type='text/css'>
      /* Some CSS */
      body { font-family: arial, sans-serif; background-color: #ffffcc; }
      h1, h2, h3, h4 { text-align: center; background-color: #ccffcc;
                       border-top: 1px solid #66ff66; }
      .mainBody { padding: 10px; border: 1px solid #555555; }
      .disclaimer { text-align: center; border-top: 1px solid #cccccc;
                    margin-top: 40px; color: #666666; font-size: smaller; }
    </style>
    <meta name='description' content='A simple page'>
  </head>
  <body>

    <h1 class='title'>SiteMesh example site: Hello World</h1>

    <div class='mainBody'>
      <p>Hello <strong>world</strong>!</p>
    </div>

    <div class='disclaimer'>Site disclaimer. This is an example.</div>

  </body>

As you can see, the <title>, <head> and <body> have been extracted from the content and inserted into the decorator template.</html>

摘要

快速回顾:

     通过将库jar放在/ WEB-INF / lib中并在/WEB-INF/web.xml中创建过滤器(带有映射)来安装SiteMesh。
     可以通过创建/WEB-INF/sitemesh3.xml文件或通过其他配置方法进行配置
     筛选器拦截对Content的请求,通过Content Processor运行它,并与Decorator合并
     内容由HTML页面定义,该页面包含网站的原始HTML内容
     装饰器还由HTML页面定义,该页面包含网站的外观和占位符,以及占位符<sitemesh:write>标记,用于指示应在何处合并内容。
     内容处理器包含提取和转换内容的规则-它具有一些简单的默认规则,可以自定义

 

Configuring SiteMesh 3

SiteMesh supports two main approaches to configurations - XML or Java. It's up to you which you use. In fact, you can even use them both.

xml 特点

  • Simplest to get started with
  • Automatically reloads when config file changes
  • Does not require Java programming

java 特点

  • Allows for greater customization of SiteMesh
  • Avoids yet another configuration file
  • Can be used from higher level languages such as JRuby, Groovy, Scala...

XML based configuration

The configuration file should live in /WEB-INF/sitemesh3.xml in your web-application.

<sitemesh>
  <mapping path="/*" decorator="/decorator.html"/>
  <mapping path="/admin/*" decorator="/admin-decorator.html"/>
</sitemesh>

Java based configuration

要使用基于Java的配置,请子类org.sitemesh.config.ConfigurableSiteMeshFilter并重载applyCustomConfiguration(SiteMeshFilterBuilder builder)方法。 您将获得一个可用于配置SiteMesh的对象。 然后,您可以将此过滤器部署到Web应用程序中。

public class MySiteMeshFilter extends ConfigurableSiteMeshFilter {
  @Override
  protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) { 
    builder.addDecoratorPath("/*", "/decorator.html")
           .addDecoratorPath("/admin/*", "/admin/decorator.html");
  }
}

注意:SiteMeshFilterBuilder类支持可链接的API,其中每个方法都返回其自身的实例。 这是一种方便,但是您不必使用此样式。

注意:如果您还有XML配置文件,SiteMesh将在调用applyCustomConfiguration()之前加载此文件。 这使您可以将XML用于某些配置,将Java用于更高级的方面。

Configuring Decorator Mappings

这是应用于SiteMesh的最常见配置-映射根据路径应用装饰器。

您可以做的事情:

     将默认的装饰器映射到所有路径
     将装饰器映射到特定路径
     将多个装饰器映射到路径-每个装饰器都将应用于前一个的结果
     排除装饰路径

<sitemesh>
  <!-- Map default decorator. This shall be applied to all paths if no other paths match. -->
  <mapping decorator="/default-decorator.html"/>

  <!-- Map decorators to path patterns. -->
  <mapping path="/admin/*" decorator="/another-decorator.html"/>
  <mapping path="/*.special.jsp" decorator="/special-decorator.html"/>

  <!-- Alternative convention. This is more verbose but allows multiple decorators
       to be applied to a single path. -->
  <mapping>
    <path>/articles/*</path>
    <decorator>/decorators/article.html</decorator>
    <decorator>/decorators/two-page-layout.html</decorator>
    <decorator>/decorators/common.html</decorator>
  </mapping>

  <!-- Exclude path from decoration. -->
  <mapping path="/javadoc/*" exclue="true"/>
  <mapping path="/brochures/*" exclue="true"/>

</sitemesh>

Java

public class MySiteMeshFilter extends ConfigurableSiteMeshFilter {

  @Override
  protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
           // Map default decorator. This shall be applied to all paths if no other paths match.
    builder.addDecoratorPath("/*", "/default-decorator.html") 
           // Map decorators to path patterns. 
           .addDecoratorPath("/admin/*", "/another-decorator.html")
           .addDecoratorPath("/*.special.jsp", "/special-decorator.html")
           // Map multiple decorators to the a single path.
           .addDecoratorPaths("/articles/*", "/decorators/article.html",
                                             "/decoratos/two-page-layout.html", 
                                             "/decorators/common.html")
           // Exclude path from decoration.
           .addExcludedPath("/javadoc/*")
           .addExcludedPath("/brochures/*");
  }

}

Advanced Configuration

For most users, the decorator mappings above should be enough. But if you want more options...

MIME Types

默认情况下,SiteMesh将仅拦截将Content-Type HTTP标头设置为text / html的响应。

可以对其进行更改以允许SiteMesh截获其他类型的响应。 这仅适用于SiteMesh筛选器-脱机站点构建器将忽略它。

<sitemesh>
  <mime-type>text/html</mime-type>
  <mime-type>application/vnd.wap.xhtml+xml</mime-type>
  <mime-type>application/xhtml+xml</mime-type>
  ...
</sitemesh>

Java

public class MySiteMeshFilter extends ConfigurableSiteMeshFilter {

  @Override
  protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
    builder.setMimeTypes("text/html", "application/xhtml+xml", "application/vnd.wap.xhtml+xml");
  }

}

部署标记规则包

SiteMesh的一项高级功能是能够定义用于处理页面上的标签的自定义规则。 这些是实现org.sitemesh.content.tagrules.TagRuleBundle的类

XML

<sitemesh>
  <content-processor>
    <tag-rule-bundle class="com.something.CssCompressingBundle" />
    <tag-rule-bundle class="com.something.LinkRewritingBundle"/>
  </content-processor>
  ...
</sitemesh>

Java

public class MySiteMeshFilter extends ConfigurableSiteMeshFilter {


  @Override
  protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
    builder.addTagRuleBundles(new CssCompressingBundle(), new LinkRewritingBundle());
  }


}

Building Offline Websites with SiteMesh 3

==使用siteMesh3构建脱机网站,  ----略

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值