cocoon系列 —— XML Server Pages(XSP) 笔记

阅读更多

XML Server PagesXSP 笔记

1、基本概念

XSP可以将动态数据添加到XML 文档中以创建更丰富的网站,也可以使 Cocoon 2 集成现有数据源和/或 API 以在因特网上用多种格式发布数据。它是一种能够创建动态 XML 数据源以便将数据传输到 Cocoon 2 管道的 Cocoon 2 技术。通过使用 XML 标记和应用逻辑的组合来描述这些数据源,然后由 Cocoon 2 引擎自动将这种组合编译为 Java 类。XSP 为使用 Cocoon 2 开发应用程序提供了一个灵活的平台。例如,Cocoon 2 应用程序可以显示现有应用程序数据库中的信息,而且启用了更为多样的数据发送选项。通过提供一种通过 XML 界面显示数据源的方法,XSP 允许在诸如中间件和文档发布那样的应用程序集成环境中使用 Cocoon 2。

1.1 XSP 与 JSP

1.1.1相同点:

1)由程序代码和标记的混合体组成

2)被编译成用于执行的二进制形式

3)允许创建定制标记库

1.1.2不同点:

1) XSP 为将任何编程语言中的代码与 XML 标记混合在一起提供了一个框架。

2) XSP 生成动态数据

XSP 生成动态数据,而不是动态表示。与之不同,JSP 则是一种通常用于在一系列处理步骤的最后阶段产生 HTML 或 XML 的表示层技术。XSP 页面为 Cocoon 管道生成 XML 数据,而由管道创建了所期望的表示。

 

1.2 XSP 编译过程

  1. 解析 XSP 文档
  2. 通过使用专用 XSLT 样式表转换 XSP 页面,以生成 Java 源代码
  3. 通过使用代码格式化器,在整齐地缩排和格式化源代码后,存储结果 Java 文件
  4. 将源代码编译成生成器
  5. 在请求管道中装入并执行已编译的生成器

 

1.3 一个XSP运行例子

Cocoon 2 提供了一个协调个别 XSP 页面的编译和执行的 ServerPagesGenerator 组件。在网站地图中,ServerPagesGenerator 声明如下:

     name="xsp" src="org.apache.cocoon.generation.ServerPagesGenerator"/>
   

要在管道中使用这个生成器,只须简单声明应当使用(而不是缺省值)并且指出在何处可以找到特定的 XSP 页面的源代码,如下所示:

   
      
      
   

 

2、语法

2.1 xsp:page 元素

xsp:page 元素是每个 XSP 文档的根元素。
   

2.2 xsp:structure 和 xsp:include 元素

当添加利用标准或定制 Java API 的编程逻辑时,必须在 XSP 中指出生成的源代码中需要另外的 import 语句以确保编译成功地完成。xsp:structurexsp:include 元素用于向代码生成过程提供这些附加提示。

   
      java.util.Calendar
      java.text.*
   
   
 

2.3 xsp:logic 元素

xsp:logic 元素用于将 Java 代码块添加到 XSP。例如:

   
      public String getTime()
      {
         return java.util.Calendar.getInstance().getTime().toString();
      }
   
   

 

   
      
         SimpleDateFormat format = new SimpleDateFormat("EEE, MMM d, yyyy");
         String timestamp = format.format(
                                   java.util.Calendar.getInstance().getTime()
                                   );
      
      
      
   
               

这个代码包含了对 XSP 文档求值时创建时间戳记的逻辑。然后通过使用 xsp:expr,这个时间戳记被添加到了 time 元素内的文档中。

2.4 避免错误,保持良好的格式

2.4.1 程序代码与 XML 标记

if (a < b && c > d) { ... }改为①if (a < b && c >) { ... }或者②
   
      if (a < b && c > d) { ... }
   ]]>
但是②将忽略这些节内出现的任何 XSP 或用户元素,而将它们当作纯文本而不是 XML 标记进行处理,这样更可能导致隐蔽的、耗时的错误。

2.4.2 xsp:logic 元素内 XML格式规则

以下有错:

   
      if (firstResult())
      {
         
      } else
      {
         
      }
         
      
   
应改为
   
      if (firstResult())
      {
         
            
         
      } else
      {
         
            
         
      }
   
 

2.5 xsp:expr 元素

xsp:expr 元素等价于在 JSP 中实现类似角色的 <%= ... %> 表达式语法。
   
      for (int i=1; i<11; i++)
      {
         i
      }
   

2.6 通过使用 xsp:element 生成动态元素

通过使用 xsp:element,还可以动态地创建元素,它的工作原理类似于其 XSLT 等价机制的工作原理。

   "myElementName"
   Element content

还可以与一个特定的名称空间和前缀关联

   "myElementName"
   Element content

这个示例生成了以下 XML 输出:

Element content

还可能动态地生成名称空间 URI 和前缀。无须添加 prefixuri 属性,而是使用带适当名称的附加 xsp:param 元素。下列代码等价于上面的示例:

   "myElementName"
   "my"
   "http://www.examples.org"
   Element content

2.7 通过使用 xsp:attribute 生成动态属性

xsp:attribute 元素的工作原理类似于 xsp:element,它允许动态创建属性的名称及其值:

   "myElementName"
   myAttributeValue
   Element content

这个属性的名称定义在 name 属性内,尽管是用与 xsp:element 类似的方法定义的,但它还能通过使用 xsp:param 子元素来定义。属性值被指定成元素内容。这可以是一个简单文本值或更有效地由 xsp:expr 元素生成。

2.8 创建注释和处理指令

2.8.1 创建注释:

This is a comment               

然后这个注释变成:

2.8.2 创建处理指令类似于创建动态元素或属性:

   "param1=value, param2=value, generatorTimestamp=" +
   System.currentTimeMillis()
               

输出如下:

            

还可以通过在 xsp:param 元素内创建处理指令的目标来自动生成它,如同以下示例演示的那样:

   "myApplication"
   "param1=value, param2=value, generatorTimestamp=" +
   System.currentTimeMillis()
 

3 逻辑单

逻辑单是能被钩接入代码生成过程以允许创建定制标记库的 XSLT 转换。这些逻辑单使 XSP 页面更容易处理,从而减少了直接嵌入代码的需要。

3.1 使用逻辑单

每个逻辑单都与一个特殊的名称空间关联。使用逻辑单仅仅涉及在 XSP 文档中声明相应的名称空间,然后在需要的时候添加来自那个名称空间的元素。

 

         xmlns:xsp="http://apache.org/xsp"
         xmlns:util="http://apache.org/xsp/util/2.0">
   
      
      
      
      
   

3.2内置逻辑单

3.2.1 环境逻辑单

在这个环境类别中有四个逻辑单,每个逻辑单都提供对与 Web 请求关联的处理环境的特殊方面的访问。这些逻辑单提供的功能类似于与 JSP 页面关联的隐式对象(例如,requestresponse 对象)提供的功能,并且是从 HTTP Servlet API 中直接提取的。

你可能感兴趣的:(XML,F#,Apache,JSP,编程)