`

【SSI开发总结.5】SiteMesh装饰器

 
阅读更多

SiteMesh项目简介

OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)
的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的分离。
Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大
量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。
它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,
使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板
的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。
一个请求到服务器后,如果该请求需要sitemesh装饰,服务器先解释被请求的资源,然后根据配置文件获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。

1.配置WEB.XML

/******* /WEB-INF/web.xml******/

<?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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd ">
<display-name>game_proj</display-name>
<!-- 中文语言支持过滤器 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.popoann.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<!-- Acegi过滤器 -->
<filter-name>acegiFilterChain</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<!-- Acegi过滤器URL映射 -->
<filter-mapping>
<filter-name>acegiFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ActionContextCleanUp过滤器 -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- SiteMesh的核心过滤器 -->
<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>
<!-- Struts核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>htm</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 应用程序启动时,加载SpringIoC容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/beans-*.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>

</web-app>

注意过滤器的顺序,ActionContextCleanUp过滤器 -> SiteMesh的核心过滤器 -> Struts核心过滤器

2.配置SITEMESH.XML

/******* /WEB-INF/sitemesh.xml******/

<sitemesh>

<!-- 指定页面装饰器配置文件地址 -->
<property name="decorators-file" value="/WEB-INF/decorators.xml"/>

<!-- 指定页面装饰器配置文件中例外定义地址 -->
<excludes file="${decorators-file}"/>

<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=gb2312"
class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
</page-parsers>
<!--
<page-parsers>
<parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
</page-parsers>
-->
<decorator-mappers>

<mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
<param name="property.1" value="meta.decorator" />
<param name="property.2" value="decorator" />
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
<param name="match.MSIE" value="ie" />
<param name="match.Mozilla [" value="ns" />
<param name="match.Opera" value="opera" />
<param name="match.Lynx" value="lynx" />
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
<param name="decorator" value="printable" />
<param name="parameter.name" value="printable" />
<param name="parameter.value" value="true" />
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
<param name="decorator" value="robot" />
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
<param name="decorator.parameter" value="decorator" />
<param name="parameter.name" value="confirm" />
<param name="parameter.value" value="true" />
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
</mapper>

<mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
<param name="config" value="${decorators-file}" />
</mapper>

</decorator-mappers>

</sitemesh>

本配置文件直接拷贝自下载的sitemesh开发包,基本上只需要修改

<property name="decorators-file" value="/WEB-INF/decorators.xml"/>

这个标签,用来指定对页面进行装配的配置文件路径

3.配置DECORATORS.XML

/******* /WEB-INF/decorators.xml******/

<?xml version="1.0" encoding="ISO-8859-1"?>

<decorators defaultdir="/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->

<excludes>
<pattern>/about.htm</pattern>
</excludes>

<decorator name="main1" page="headAndFoot1.jsp">
<pattern>/index.htm</pattern>
</decorator>

<decorator name="main2" page="headAndFoot2.jsp">
<pattern>/myspace/*</pattern>
</decorator>
</decorators>

decorators标签的 defaultdir属性指定修饰页面相对于应用程序根目录的位置,这里为 "/decorators"

excludes标签:指定哪些页面不被修饰

decorator指定哪些匹配页面被修饰,支持通配符,page属性表示修饰页面,即给页面穿什么样的衣服

4.设计修饰页面

/****** /decorators/headAndFoot1.jsp ******/

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title><decorator:title default="kangxm test" /> </title>
<decorator:head/>
</head>

<body>
<decorator:body/>
</body>
</html>

红色标示表示需要配置的标签:

<%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
<%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page"%>

确保本页面被纳入SiteMesh体系

<decorator:title default="kangxm test" />

提取被装饰页面的标题,如果没有指定,则使用“kangxm test”

<decorator:head/>

提取被装饰页面head标签中的内容

<decorator:body/>

提取被装饰页面body标签中的内容

/*************************************************************

到此,SiteMesh配置结束,总得来说,配置比较容易,使页面控制更灵活,同时,也避免了重复性代码的出现。

【注意】:要使sitemesh能与struts2集成,还必须下载struts2的sitemesh插件

分享到:
评论

相关推荐

    DWC_ssi_user.pdf

    根据提供的文档信息,我们可以得出这份文档是关于DesignWare Synchronous Serial Interface (SSI) 的用户指南。接下来,我们将从几个方面来解析与理解这份文档中的关键知识点。 ### 一、产品概述 #### 1.1 ...

    SSI_Library.rar_SSI_SSI Verilog_logic_ssi verilog_verilog ssi

    SSI,全称是Small-Scale Integration,是一种早期的集成电路(IC)集成度分类方式,它主要包含基础的逻辑门电路,如与非门、或非门、非门等。在现代数字系统设计中,SSI仍然作为理解数字逻辑设计的基础。Verilog是一...

    fsl_ssi_dbg.rar_SOC

    总结来说,"fsl_ssi_dbg.rar_SOC"是一个关于Freescale SoC上ALSA子系统中SSI DAI调试的资源,包含的"Fsl_ssi_dbg.c"源代码文件是理解和改进SoC音频处理性能的关键。这涉及到音频硬件驱动编程、DAI操作、调试技术和...

    SSI_read.rar_SSI verilog_SSI 11bit read_SSI_read_ssi verilog_v

    在本项目中,我们关注的是如何使用Verilog硬件描述语言来实现一个11位编码器的SSI读取功能。Verilog是一种广泛应用于集成电路设计、验证的语言,能够描述数字系统的结构和行为。 首先,理解11位编码器的含义是关键...

    SSI-ABZ.rar_FPGA ABZ_FPGA SSI_SSI 转 ABZ信号FPAG程序_abz_ssi fpga

    在本例中,FPGA被用作一个信号转换器,接收SSI输入信号,并根据预设的逻辑设计将其转换为ABZ格式。这个过程通常涉及以下步骤: 1. **接口设计**:首先,需要在FPGA内部设计相应的接口,以接收SSI信号。这包括对时钟...

    omap_ssi_port.rar_SSI

    OMAP SSI Port驱动程序是针对德州仪器(TI)OMAP系列微处理器中串行外设接口(Serial Slave Interface,SSI)的特定实现。SSI在嵌入式系统中被广泛用作高速数据传输机制,特别是在音频、视频和图像处理应用中。这个...

    PyPI 官网下载 | galileo-ssi-1.2.tar.gz

    4. **Python库**:作为Python库,"galileo-ssi"提供了一组Python编程接口(APIs),让开发人员能够轻松地在他们的Python项目中利用其功能,例如处理分布式系统的协调或云原生应用的构建。 在解压"galileo-ssi-1.2....

    SSI-RS232.rar_SSI_SSI RS232_SSI SSI_SSI协议_协议转换

    用于将SSI协议转换成RS232协议,因为带SSI协议处理能力的单片机几乎没有

    ssi_rx.rar_SSI_SSI VHDL_VHDL SSI_uart_vhdl

    vhdl"表明这是一个关于SSI(Synchronous Serial Interface)串行同步接口接收部分的VHDL设计项目,使用了Xilinx ISE作为开发环境,并且包含了UART(Universal Asynchronous Receiver/Transmitter)通用异步收发器的...

    ssi—1.zip_SSI法_ssi参数识别_模态参数 识别_模态识别_识别模态振型

    SSI法,全称为随机子空间识别(Stochastic Subspace Identification),是结构动力学领域中用于模态参数识别的一种重要方法。这种方法主要用于从实测的结构响应数据中提取出结构的固有特性,如模态频率、模态振型和...

    前端项目-ssi-modal.zip

    在前端开发中,模态窗口(Modal)是一种常见的交互元素,它可以在不离开当前页面的情况下显示额外的信息或功能。"SSI Modal" 是一个专为前端项目设计的模态解决方案,它以其灵活性和强大的功能而受到开发者的青睐。...

    ssi整合 jar包

    5. **安全性**:如同所有服务器端技术,SSI也存在安全风险。比如,未经验证的用户输入可能被用作SSI指令,导致敏感信息泄露或代码注入。因此,确保对用户输入进行严格的过滤和验证至关重要。 6. **现代替代方案**:...

    SSI编码器.pdf

    SSI编码器是一种高精度的位置检测设备,常用于工业自动化领域,如机器人、精密机床和生产线定位等。这种编码器能够提供精确的单圈和多圈位置信息,通过SSI(Synchronous Serial Interface)通信协议与控制系统进行...

    25位绝对值编码器SSI协议.c

    本代码为SSI协议的绝对值编码器读取程序,用于输出25位SSI数据,实际使用时根据数据位数稍作修改即可。本代码已在精浦编码器上实际应用验证。

    ssi_tx.rar_SSI_Xilinx_higher4k1_txssi_vhdl

    标题中的"SSI_tx.rar_SSI_Xilinx_higher4k1_txssi_vhdl"指的是一个关于SSI(Synchronous Serial Interface)的传输部分,特别是在Xilinx FPGA(Field-Programmable Gate Array)平台上实现的更高4k1(可能指的是4096...

    手把手构建Maven企业级应用(整合SSI框架).pdf

    5. **开发业务逻辑**:在各个层中实现具体的业务逻辑。例如,在`verticalmarket-service`模块中编写服务接口和服务实现;在`verticalmarket-manager`模块中处理业务流程;在`verticalmarket-dal`模块中定义数据访问...

    有关随机子空间(SSI)算法.rar

    随机子空间识别(SSI, Stochastic Subspace Identification)是一种在信号处理和工程领域广泛应用的系统辨识方法,特别是在机械结构动态分析中。该方法利用随机输入和输出数据来估计线性时不变系统的动力学特性,如...

    SSI_485.rar_SSI 协议_SSI协议_ssi 单片机_转换485_转换485协议

    用于将SSI协议转换成RS485协议,转换后更加便于单片机读取

    服务器电源SSI标准收集.pdf

    SSI标准(Server System Infrastructure)规范是Intel联合一些主要的IA架构服务器生产商推出的新型服务器电源规范,SSI规范的推出是为了规范服务器电源技术,降低开发成本,延长服务器的使用寿命而制定的,主要包括...

    RS422-ssI-5145.zip_SSI_SSI SSI

    新华龙系类单片机与5145系列编码芯片sii通讯程序,实现数据上传

Global site tag (gtag.js) - Google Analytics