J2EE应用用户接口开发(三)
作者 KURT A. GABRICK
DAVID B. WEISS
出处 J2EE and XML Development第五章
地址 <<http://www.manning.com/gabrick>>
本文是J2EE和XML开发用户接口的第三部分,如果对文中的例子不熟悉请参见本文的第一、二部分
J2EE和XML开发用户接口(一) <<http://www.csdn.net/develop/article/19/19844.shtm>>。
4.3 扩展为二进制格式
在离开使用XSLT提交接口的主题之前,我们需要重点看看XSLT格式化对象的能力。现今高级Web应用的流行需求是能动态的生成二进制的文件。使用XSLT格式化对象(FO)的实现,你可以从动态XML数据转换为二进制格式的数据,例如PDF格式的文件。这一部分我们通过实现生成股票列表的PDF文件的例子来说明这一点。Apache Software Foundation项目FOP目前已经部分实现了格式化对象。你可以从<http://xml.apache.org/fop下载它的文档和实现>。
为了便于讨论,我们假设需要为股票信息表生成PDF文件而不是HTML文件。修改我们的XSLT版本的例子以生成PDF需要两个步骤
·我们必须修改产生HTML的样式表以用来产生一个FOP格式化对象树取代HTML页
·我们必须在XSLT Filter最后加一步用来调用FOP API并且将格式化对象树转换为PDF文档
所谓格式化对象树是一个特定的XSL样式表,它包含一组打印格式化指令,FOP Driver组件使用这些指令从XML文档创建PDF文件。生成PDF的修改流程如下图示
创建格式化树
上图表明了格式化树样式的基本结构。树包括两个主要构件:布局和页面序列。布局描述了可以被用于一个或多个页面序列的页面模板。每个页面序列定义了显示在PDF中的实际内容,包括所有格式化信息。在我们的例子中,我们创建一个布局(主模板)和一个页面序列。我们的页面序列将包括单独的显示信息页面。
列表4.11包括了产生 US英语版本PDF格式的WatchList页面的完整XSL样式
list 4.11
为了利用FO样式,我们必须调用Apache FOP API。因为我们不想将我们的过滤器实现与特定的FO实现系在一起,所以我们将FOP使用一个类PDFWriter将它包装起来。这个类需要一个格式化树样式的全路径以及一个XML输入数据源,并且将PDF输出到指定的输出流上。要完成这样的工作,PDFWriter使用了Apache FOP和JAXP API for XSLT。这个适配器的代码在列表4.12中。
list 4.12
最后就是修改XSLT过滤器以便当html是输出格式的时候使用PDFWriter。修改后的的类为XSLTPDFFilter在列表4.13中列出
list 4.13
下图显示的是PDF输出的情况
5 XML Web发布框架
Web发布框架合并Java和XML技术成为可使用的体系结构。使用Web发布框架,你可以创建基于XML的表示层而不需要书写任何用于整合XML的定制代码。基于XML的Web发布框架还是相当新的技术,它们的可靠性依赖于使用组件的稳定性,包括XML解析器和XSLT处理器。下面是一些比较流行的Web发布框架产品:
·Webmacro(http://www.webmacro.org)
·Enhydra(<http://www.enhydra.org>)
·Cocoon(<http://xml.apache.org/cocoon>)
出于与前述XSLT实现的比较目的,我们现在探讨如何将我们的股票例子用Cocoon Web发布框架来开发。
5.1 Cocoon体系结构介绍
使用Cocoon进行用户接口开发包括XSL样式和XSP页的创建。因为XSP是当前一个限制在Cocoon上的技术,我们将着重考虑Cocoon的XSLT能力。下面是Cocoon处理流程图
XML Server Pages(XSP)是一个用于基于XML的程序生成语言的工作指南。XSP包括能够控制对于给定XML数据集如何被处理的指令。使用Cocoon的最简单的方法是在你的XML数据文档中添加特别的处理指令。这些指令允许Cocoon处理和格式化你的数据并将它发送到请求的客户端。所支持的输出格式包括WML、PDF、XML和XHTML。
Cocoon生产者
生产者是负责生成XML数据的软件构件。它们与Servlet功能相似用来接收和处理HttpServletRequest。这是Cocoon的一个可扩展的地方,你可以实现自己的生产者来获得指定的处理能力。Cocoon使用FileProducer以便从文件系统中读取请求的文件。
Cocoon处理器
数据一旦被产生,它们将可以用于处理。处理器是负责进行操作(如XSLT转换生产者生产的XML数据)的构件。Cocoon包含下列的处理器:
·XSLT处理器
·LDAP处理器
·XSP处理器
书写你自己的处理器与编写JSP定制标记类似。标记被创建,处理一些逻辑并被页面使用。
Cocoon格式化帮手
格式化帮手帮助那些可能被应用于应答请求的构件。它用于包装输出内容并加入附加格式化信息。
5.2 使用Cocoon提交股票信息
让我们实践一下Cocoon,我们将使用标准的Cocoon XSLT处理器作为XSLT转换器对我们的XML数据进行转换。我们已经开发了XSL样式,所以只需要修改返回应用逻辑层的XML文档,在我们的XSL样式中加入Cocoon处理指令,如下所式
<?cocoon-process type=xslt?>
然后我们添加两个指令描述应用于数据的HTML和WML样式。对于US地区,指令如下
<?xml-stylesheet href=watchlist.html.en_US.xsl type=text/xsl ?>
<?xml-stylesheet href=watchlist.wml.en_US.xsl type=text/xsl media=wap ?>
media=wap属性告诉Cocoon为WML用户选择对应的样式。否则就会使用缺省的样式。Cocoon被设计成可以像Servlet那样访问,但是我们也可以通过调用API使用它。在列表4.14中,我们修改了WatchListServlet,添加了处理XML数据文档的合适指令并且调用了Cocoon引擎以便转换和向客户发送结果。
list 4.14
下图说明了我们的新的表示层,它结合了Cocoon和J2EE表示层组件
至此全文完
更多信息
1. <http://www.theserverside.com/>
2. <http://www.javaworld.com/>
如果需要转贴请写明作者和出处