XML 和 WebSphere Studio Application Developer — 第 3 部分: SQL 和 XML

介绍
IBM WebSphere® Studio Application Developer是一个应用开发产品,它支持使用不同技术(例如:JSP™、servlet、HTML、XML、Web 服务、数据库和 EJB)开发多种应用。特别地,Application Developer 提供 XML 和关系数据的紧密集成。

Application Developer 支持 WebSphere Application Server 所支持的所有数据库,包括 DB2®、Oracle、Sybase 和 Microsoft® SQL Server。

本文是讨论随 Application Developer 提供的 XML 工具的系列文章的第 3 部分。 第 1 部分讨论如何使用 WebSphere Studio Application Developer 开发 XML Schema, 第 2 部分演示如何使用 Application Developer 的 SQL Builder 创建 SQL 查询。本文,即第 3 部分,讨论可用来将数据访问和 XML 结合到您的应用中的功能。使用第 2 部分中创建的 SQL 查询,我现在将演示如何使用 Application Developer 做以下事情:

在“用 XML from SQL Query 向导从 SQL 语句生成 XML 和相关文件”部分中,您将看到 Application Developer 包含的 SQL 到 XML 生成工具是如何让您轻松地从 SQL 查询生成 XML、DTD、XSD、XSL 以及查询模板(XST)文件的。

在“从一个 Web 工程将样本 servlet 部署到 WebSphere Application Server”部分中,我描述在 servlet 内动态地使用 SQL 查询生成 XML,并向您展示如何在 Application Developer 中将 servlet 部署到 WebSphere Application Server。Application Developer 随带有一个 SQLtoXML Java™ 类库;在您的 Java 应用程序或 servlet 中,您可以用这个类库来执行 SQL 语句并将结果构造成 XML。通过使用 XMLIntegratorServlet 样本,在 WebSphere Application Server 中,生成的 XST 文件用来在运行时执行 SQL 语句。您可以修改这个 servlet,以用在您自己的应用程序中。

场景和样本查询
我们将探讨的样本应用程序是一个音像零售商店应用程序。该应用程序允许商店雇员创建、维护和查询客户、库存和租用信息。商店数据库保存商店客户、库存、音像制品租用和雇员的相关数据。应用程序需要有一个查询,这个查询允许商店雇员查看某特定客户已租用的音像制品的标题以及星期几到期。查询在运行时要用客户姓名作参数。在 SQL Builder 中,查询的样子如下所示:

图 1. 查询在 SQL Builder 中出现的样子
查询在 SQL Builder 中出现的样子的屏幕抓图

从 SQL 查询生成 XML
在这部分中,我将演示如何根据我们刚刚创建的客户租用查询生成 XML 和相关文件。XML from SQL Query 向导用来完成这些:

  1. 在 Data 视图中,鼠标右键单击 customerRentals语句并从弹出菜单选择 Generate new XML。XML From SQL 向导打开时如下面的图 2 所示。

    图 2. XML from SQL Query 向导
    XML from SQL Query 向导的抓屏图

  2. 选择将结果表列显示为生成的 XML 中的元素。除了这个 XML 文档之外,我们还将为它生成一个 DTD 定义。正如您能在上面的图 2 中所看到的,模式定义生成是可选的,如果您选择的话,它可以是 XML Schema,而不是 DTD。
  3. 接着,选中 generate a query template file(XST 脚本)。这个文件稍后将被音像商店 Java 应用程序用来查询数据库和检索作为 XML 的结果。单击 Finish
  4. 切换到 Navigator 视图,观察所生成的 HTML、XSD、XST、XSL 和 XML 文件。您可以使用 XML 工具对这些文件作进一步处理。例如,您可以通过把 XSL Trace 工具应用到 XML 文件,跟踪所生成的 XSL 文件。要调用 XSL Trace 工具,请选择 XSL 和 XML 文件,并从弹出菜单选择 Apply XSL=>As XML。您可以分别用 XML Schema 编辑器、HTML 编辑器或 XML 编辑器浏览或编辑 XSD、HTML 和 XML 文件。

将 XSL 文件应用到 XML 文件以得到 HTML 或查看 HTML 文件会给我们以下结果:

标题 姓名 到期日期
The Adventures of Kernighan and RitchieJohn DoeThursday
The Taming of the FooJohn DoeThursday

在 servlet 中使用查询模板文件
这部分描述如何可以在运行时执行查询以从 SQL 动态地生成 XML。给出了一些代码片段,以使您对如何将这些代码结合到您自己的 servlet 中有一个概念。Application Developer 随带有一个样本 servlet 和 HTML 文件,您可以按您自己的目的加以修改。它们使用本部分所描述的 XST 文件和代码。想看一个如何使用这个样本 servlet 的示例,请参阅下面讲述 部署样本 servlet的部分。

在音像商店应用程序中,您可以在运行时使用用 SQL to XML 向导创建的查询模板(XST)文件,以动态地从 SQL 生成 XML。要这样做,请使用 Application Developer 随带的 SQLtoXML Java 类。所生成的 XST 文件内容如下。这个 XST 文件给 SQLtoXML 类提供数据库连接信息、SQL 查询和您为生成 XML 结果而选择的选项。

<?xml version="1.0"?> 
<SQLGENERATEINFORMATION> 
  <DATABASEINFORMATION>
    <LOGINID>JOAN</LOGINID>
    <PASSWORD><![CDATA[somepassword</PASSWORD>
    <JDBCDRIVER>COM.ibm.db2.jdbc.app.DB2Driver</JDBCDRIVER>
    <JDBCSERVER>jdbc:db2:VIDEOS</JDBCSERVER>
  </DATABASEINFORMATION> 
  <STATEMENT> 
    <![CDATA[ SELECT WSAXML.VIDEOS.TITLE AS VIDEOTITLE, 
    WSAXML.CUSTOMERS.NAME AS CUSTNAME, 
    CASE DAYOFWEEK(WSAXML.RENTALS.DATE) 
    WHEN 1 THEN 'Sunday' WHEN 2 THEN 'Monday' WHEN 3 THEN 'Tuesday' 
    WHEN 4 THEN 'Wednesday' WHEN 5 THEN 'Thursday' WHEN 6 THEN 'Friday'
    WHEN 7 THEN 'Saturday' END AS DUEDATE FROM WSAXML.VIDEOS, 
    WSAXML.RENTALS, WSAXML.CUSTOMERS WHERE WSAXML.VIDEOS.VID_ID = 
    WSAXML.RENTALS.VID_ID AND WSAXML.RENTALS.CUST_ID = 
    WSAXML.CUSTOMERS.CUST_ID AND WSAXML.CUSTOMERS.NAME = 
    :custName GROUP BY DAYOFWEEK(WSAXML.RENTALS.DATE), 
    WSAXML.VIDEOS.TITLE, WSAXML.CUSTOMERS.NAME
  </STATEMENT> 
    <OPTIONS> 
    <FORMATOPTION>GENERATE_AS_ELEMENTS</FORMATOPTION> 
    <RECURSE>FALSE</RECURSE> 
  </OPTIONS> 
</SQLGENERATEINFORMATION>

要在 Java servlet 中使用 SQLToXML 类,classpath 必须设置成包含 Xalan 处理器和 Xerces 解析器以及 sqltoxml.jar 文件。您可以从头创建 servlet,或者修改 Application Developer 随带的通用 servlet( XMLIntegratorServlet.java )。您可以使用 WebSphere Application Server 或 Tomcat 来运行这个 servlet。关于 servlet 部署的更多信息,请参阅下一部分。

要装入这个模板文件,请使用 SQLToXML 运行时库随带的 QueryProperties 类,如下:

QueryProperties qp = newQueryProperties();
qp.load("locateRentedVideo.xst");

实例化 SQLToXML 类的代码如下:

SQLToXML sql2xml = new SQLToXML(qp);

您可以使用 SQLToXML 类的几个 execute 方法来生成为了向应用程序的用户显示查询结果而需要的文件。对于我们定位客户所租用的音像制品的音像商店查询,我们在搜索条件中使用一个变量。音像商店的雇员将输入客户姓名以查询商店数据库中所存储的客户、音像制品和租用信息。在该 Java 代码中,您可以将包含雇员所输入的值的参数通过 execute 方法的参数列表把音像制品的名字提供给查询。

音像商店 Java 应用程序的 execute 方法的一个使用中的示例如下所示。请注意,第一个参数是向 Java 应用程序传递在我们的查询中的 :custname 变量值。

sql2xml.execute('John Doe', xmlPrintWriter, "customerRentals.dtd", 
  "customerRentals.xsd", xslPrintWriter);

execute 方法的结果(XML、XSD、DTD 和 XSL)被 Java 应用程序用来向雇员显示查询结果。

从一个 Web 工程将样本 servlet 部署到 WebSphere Application Server
针对 WebSphere Application Server,版本 4.0 的一个通用 servlet( XMLIntegratorServlet.java )演示了 SQLToXML 运行时库的典型用法。您可以修改这个 servlet,将它用在其它应用程序(例如:音像商店应用程序)上。然后,您可以在 Application Developer 中将这个 servlet 部署到 WebSphere Application Server。这里,我将向您展示如何修改这个通用 servlet 以及前面生成的查询模板(XST)文件,将这个 servlet 部署到 WebSphere Application Server。步骤(详述在后)如下。

  1. 创建一个 Web 工程
  2. 将 servlet 导入到 Web 工程
  3. 设置 classpath 变量
  4. 将所需要的库添加到工程的构建路径
  5. 导入应用程序样本文件
  6. 修改 HTML 和 servlet 以指向我们的应用程序
  7. 修改 servlet 和 HTML 以接受参数
  8. 将 SQLToXML JAR 文件导入到 WEB-INF 目录
  9. 使用查询模板文件在服务器上运行应用程序

创建一个 Web 工程
首先,我们将为音像商店应用程序新建一个 Web 工程。要这样做,请:

  1. 从菜单选择 File =>New =>Project
  2. 在 New Project 向导中,在左边选择 Web类目,然后从右边选择 Web Project。单击 Next
  3. 输入 VideoWeb作为工程的名称并接受其它所有缺省值。单击 Finish
  4. 在工作区中为您创建了 Web 工程,透视图转到了 Web 透视图。

将 servlet 导入到 Web 工程
接着,我们需要将 servlet 导入到这个工程,以便可以用它来部署。要这样做,请:

  1. 从菜单选择 File =>Import
  2. 在 Import 向导中,选择从 File system导入。单击 Next
  3. 对于目录,请使用 Browse 按钮,浏览至以下路径(Application Developer 安装在这个目录): plugins/com.ibm.etools.sqltoxml/samples/was4.0 。单击 OK
  4. 将树展开,选择 source复选框。
  5. Folder域(这是导入的目标目录)输入 VideoWeb
  6. 单击 Finish
  7. 看看 Navigator 视图中的 VideoWeb/source 目录,您将看到路径 com/ibm/etools/sqltoxml/servlet 包含两个 Java 文件。忽略 Tasks 视图中显示的任何错误。当我们完成工程的设置时,这些错误将消失。

设置 classpath 变量
本工程需要设置 SQLTOXML、WAS_XALAN 和 XERCES classpath 变量。XML 透视图自动初始化这些变量。我们将切换到 XML 透视图以利用这一点。从菜单选择 Perspective =>Open =>XML。您可以通过查看 Java 首选项检查该环境定义了哪些 classpath 变量。要这样做,请:

  1. 选择 Window =>Preferences
  2. 在 Preferences 向导中,展开 Java节点并单击 Classpath Variables
  3. 在这个向导的右边,您将看到所列出的所有 classpath 变量。

将所需要的库添加到工程的构建路径
对于这个 Web 工程,需要将 SQLToXML、XALAN 和 XERCES 库添加到 Java 构建路径。由于这些库已经是 classpath 中的变量,所以我们只要将变量添加到这个 Web 工程的库列表就可以了。这种添加 JAR 文件的方法意味着这些路径不是硬编码的,从而是可重定位的。要这样做,请:

  1. 鼠标右键单击该 Web 工程并从弹出菜单选择 Properties
  2. 在 Properties 对话框中,从对话框左边的列表中选择 Java Build Path
  3. 在对话框的右边,单击 Libraries选项卡,您将看到已经在工程的构建路径中的库。
  4. 单击 Add Variable按钮。
  5. 在 Classpath Variable Selection 对话框中,使用 Browse按钮选择 SQLTOXML变量。单击 OK
  6. 再次单击 OK关闭 Classpath Variable Selection 对话框。
  7. 重复后四个步骤将下列两个变量添加到 Libraries 列表:
    • XERCES
    • WAS_XALAN
  8. 现在所有的库都已经被添加(请参看下面的图 3)。单击 OK

    图 3. 添加了所有库的 Java Build Path
    添加了所有库的 Java Build Path 视图的抓屏图

导入应用程序样本文件
要使用这些样本应用程序文件,我们需要将它们导入到 Web 工程:

  1. 从菜单选择 File =>Import。选择从 File System 导入并单击 Next
  2. 浏览至 plugins/com.ibm.etools.sqltoxml/samples/was4.0/ 目录。
  3. 展开目录树并选择 webApplication复选框。
  4. Folder域(这是导入的目标目录)输入 VideoWeb。单击 Finish
  5. 选择 Yes 用所导入的副本覆盖 web.xml

修改 HTML 和 servlet 以指向我们的应用程序
样本代码中的某些路径需要修改以与 VideoWeb 工程的路径匹配。即 HTML 中用于 POST 命令的上下文根路径(context root)和 servlet 中的 servlet 变量路径。首先,我们将修改上下文根路径:

  1. 在 Navigator 视图中,展开 webApplication 视图,找到 XMLIntegrator.html 文件。
  2. 鼠标右键单击 XMLIntegrator.html 文件,选择 Open with =>Source Editor
  3. 现在,HTML 源文件显示在了编辑器中。
  4. 将 FORM 标记:
    <FORM name="sqltoxmlsample" METHOD="POST" 
      ACTION="/sqltoxml/servlet/XMLIntegratorServlet">

    更改为:

    <FORM name="sqltoxmlsample" METHOD="POST" 
      ACTION="/
                VideoWeb/servlet/XMLIntegratorServlet">
              
  5. 通过选择 File =>Save XMLIntegrator.html 保存该文件。

接着,我们将修改 XMLIntegratorServlet SERVLET 变量:

  1. 在 Navigator 视图中,展开 VideoWeb 工程源目录,直到找到 XMLIntegratorServlet.java 文件。
  2. 双击 XMLIntegratorServlet.java 在 Java 编辑器中打开这个文件。
  3. 找到这一行:
    private static final String SERVLET = 
      "/sqltoxml/servlet/XMLIntegratorServlet";

    并将它改为:

    private static final String SERVLET = 
      "/
                VideoWeb/servlet/XMLIntegratorServlet";
              
  4. 通过选择 File =>Save XMLIntegratorServlet.java 保存该文件。

修改 servlet 和 HTML 以接受参数
样本 XMLIntegrator.html 文件有一个输入域,用来从用户那里获取 XST 文件的文件名。customerRentals 查询有一个参数,这个参数也需要客户输入:客户姓名。要修改 HTML 文件以便为这个参数提供一个输入域,请做以下事情:

  1. 如果文件尚未打开,通过鼠标右键单击并选择 Open with =>Source Editor打开它。
  2. 找到这一行:
    <input type="Hidden" name="params" VALUE="" SIZE=50 MAXLENGTH=50>
  3. 添加一个标签,将类型(type)改为 Text,将标签和文本放到表格的一行中,如下:
    <tr> 
    <td> 
    <B>Customer Name:</B> 
    </td> 
    <td> 
    <input type="Text" name="params" VALUE="" SIZE=50 MAXLENGTH=50> 
    </td> 
    </tr>
  4. 保存这个文件。XMLIntegratorServlet 已经有处理参数的代码,所以我们只需做这一个改动。

将 SQLToXML JAR 文件导入到 WEB-INF 目录
在运行时,访问如 QueryProperties 类这样的东西时将需要 SQLToXML JAR 文件,QueryProperties 类在上一部分讲到过。要使它在运行时可用,这个 JAR 文件必须位于 Web 工程的 WEB-INF 目录。按以下步骤将这个 JAR 文件导入:

  1. 在 Navigator 视图中,选择 VideoWeb/webApplication/WEB-INF 下的 lib目录。
  2. 从菜单选择 File =>Import
  3. 选择从 File system导入并单击 Next
  4. 浏览至 plugins/com.ibm.etools.sqltoxml/jars/ ,这个目录在 Application Developer 所安装在的目录之下。
  5. 在左窗格中单击 jars。在右窗格中,选中 sqltoxml.jar 复选框。
  6. 将目标文件夹设置为 VideoWeb/webApplication/WEB-INF/lib
  7. 单击 Finish。JAR 文件出现在该 Web 应用程序的 lib 目录。

使用查询模板文件在服务器上运行应用程序
现在我们已经准备好在服务器上运行这个应用程序了。我将向您展示如何启动服务器,然后又如何使用查询模板文件运行查询。

  1. 在 Navigator 视图中,鼠标右键单击 XMLIntegrator.html 文件。
  2. 从弹出菜单中选择 Run on Server。出现一条发布消息,后跟一条服务器正在启动的消息。现在 Server 透视图打开了。
  3. Server 透视图底端的 Console 中的消息告诉您应用服务器正在做什么事。您将看到,消息表明服务器正在启动。
  4. 一旦服务器已经运行, XMLIntegrator.html 文件将出现在 Application Developer Web 浏览器中。请参阅以下的图 4。

    图 4. XMLIntegrator.html 文件出现在 Application Developer Web 浏览器中样子
    XMLIntegrator.html 文件出现在 Application Developer Web 浏览器中的样子的抓屏图

  5. 在输入域中,输入前面生成的 customerRentals.xst 文件的位置。
  6. 在参数输入域中输入参数 'John Doe' 用于查询。
  7. 单击 Submit提交查询。您将在 Web 浏览器中看到结果,如下面的图 5 所示。

    图 5. 显示在 Web 浏览器中的查询结果
    显示在 Web 浏览器中的查询结果的抓屏图

要在完成应用程序的运行时停止服务器,请:

  1. 单击控制台中的 Servers选项卡。
  2. 鼠标右键单击正在运行中的服务器并从菜单选择 Stop

总结
在本文中,我讨论了 WebSphere Studio Application Developer 所提供的对在 Web 应用程序中一起使用 SQL 和 XML 的支持。您已经看到如何使用 Application Developer 来:

  • 从 SQL 查询生成 XML 和其它与 XML 相关的文件:XSL、DTD、XML Schema 和查询模板文件。
  • 在 servlet 内使用所生成的查询模板、DTD 和 SQLToXML 类库在运行时从 SQL 查询动态地生成 XML。
  • 使用样本 servlet 从一个 Web 工程将这个 servlet 部署到 WebSphere Application Server。

在将来的文章中,您将看到 SQL Builder 和其它 XML 工具的集成。例如,使用 RDB 到 XML 的映射工具创建 DAD 文件以及 DADX Web 服务 DAD 文件的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值