简介
IBM® DB2® Everyplace™ 是为个人数字助理(PDA)、手持个人电脑、移动电话和嵌入式设备设计的占用资源较少的关系数据库解决方案。它是 IBM 移动计算解决方案的一部分,它能让移动的专业人士(如销售人员)无论走到哪里都可以访问所需要的重要数据。
在关于 DB2 Everyplace 的前几篇文章中,我已经描述了:
使用 DB2 Everyplace 创建用于掌上设备的移动应用程序(Creating a Mobile Application for Palm Devices Using DB2 Everyplace),
使用 DB2 Everyplace 构建无线 Java 应用程序(Building Wireless Java Applications Using DB2 Everyplace)和
使用 DB2 Everyplace 使无线应用程序数据同步(Synchronizing Wireless Application Data Using DB2 Everyplace)。
在本文中,我将更进一步,向您描述如何创建和部署 JSP 应用程序以从移动应用程序访问 DB2 Everyplace 数据。我们将完成下列步骤:
回顾 DB2 Everyplace JSP 支持和定制标记
用 Java™ 创建 DB2 Everyplace 数据库表
构建样本 JSP 应用程序
使用 DB2 Everyplace 提供的微型 HTTP Web 服务器在 Windows® 工作站上部署和测试样本应用程序
在 Windows CE® 设备上安装 DB2 Everyplace JSP 支持
本文假定已经在 Windows 2000 环境上安装和配置了 DB2 Everyplace 8.1 和 SDK。请参考 文档以了解 DB2 Everyplace 安装指示信息。当您准备试用我所描述的样本应用程序时,请转至本文 下载一节。
DB2 Everyplace 对 JSP 开发的支持
DB2 Everyplace 解决方案由下列组件构成:
数据库引擎:为移动设备设计的占用资源较少的关系数据库系统。
同步服务器:在移动设备上的 DB2 Everyplace 数据库和企业数据库之间移动数据的双向同步服务器。
移动应用程序构建器:一个用于创建在移动设备上运行的 DB2 Everyplace 应用程序的快速应用程序开发工具。
有关这些组件的更多信息,请参阅文章 使用 DB2 Everyplace 为 Palm 设备创建移动应用程序。
这个关系数据库引擎为关系数据提供持久存储并且提供使用 SQL 提供修改和检索记录的能力。可以用几种不同的方法访问 DB2 Everyplace 数据库中的数据,包括使用命令行处理器(Command Line Processor,CLP)发出 SQL 语句和使用将 ODBC 或 JDBC™ 用作调用级接口的应用程序。
此外,DB2 Everyplace 还提供了用于数据库访问的 JSP 支持,可以将这种支持部署在提供了 Java™ 运行时环境的移动设备上。
JSP 支持可用于下列操作系统:
Win32(Windows NT® 和 Windows 2000)
Windows CE/Pocket PC
使用 Java 创建 DB2 Everyplace 数据库表
为了演示 DB2 Everyplace 对 JSP 应用程序开发的支持,我在本文中包括了一个 样本应用程序。
首先,我们将创建一个稍后将由 JSP 应用程序访问的 ITEM 表。ITEM 表包含每项物品的标识、描述、价格和可用性。
要创建 ITEM 表,将 sample-db2jsp.zip 文件解压缩到 c:\\directory, directory 代表您选择的任何目录。这将创建一个名为 sample 的文件夹。sample 目录中包含 BuildDB.java 和名为 SetupDB.bat 的批处理文件。
要创建数据库,修改 SetupDB.bat 以使 DB2EVERYPLACE_LOCATION 变量指向安装 DB2 Everyplace 的位置。当运行 SetupDB.bat 时,它会编译并运行 BuildDB.java 文件。
BuildDB 类将在目录 C:/sample/Data/ 中创建 ITEM 表。如果在运行该文件时发生错误,请确保为 DB2EVERYPLACE_LOCATION 设置的路径是正确的。
运行 SetupDB.bat 之后,会收到下列消息:
Table: ITEM created
Results from table ITEM :
ITEM_ID: A1001
ITEM_NAME: Think Pad
ITEM_DESC : Configuration P4,256 SDRAM.
ITEM_PRICE : $25000.
ITEM_AVAILABLE: Y
DB2 Everyplace 定制标记以及 JSP 支持的概述
DB2 Everyplace 中对 JSP 的支持由两个组件构成:
微型 HTTP Web 服务器
JSP 处理器
微型 HTTP Web 服务器使用 HTTP 1.1 协议接收来自 Web 浏览器的请求,并将响应发送回 Web 浏览器。JSP 处理器解析 JSP 文件,生成相应的 Java 源代码,然后编译该源代码。Java 源代码可能包含在 JSP 页面受到请求时生成动态内容的 Java Bean。当 JSP 页面受到请求时,微型 HTTP Web 服务器执行相应的 Java 代码,然后将输出作为对请求的响应发送回 Web 浏览器。
JSP 应用程序开发是在 Windows 工作站上完成的,然后移植到移动设备上。
DB2 Everyplace JSP 支持中提供的 JSP 标记
DB2 Everyplace 中的 JSP 标记是 JSP 1.1 规范的子集。可用于 JSP 开发的标记如下:
page 伪指令:
page 伪指令定义了依赖于页面的属性。语法如下:
<%@
page page_directive_attr_list %>
page_directive_attr_list ::=
{language="scriptingLanguage"}
{extends="className" }
{import="importList" }
{contentType="ctinfo" }
这条伪指令的四个有效属性是:
language— 必须是“java”。
extends — 如果被指定,必须出现在 JSP 文件的开始处。缺省情况下,导入 com.ibm.db2e.jsp.server、java.io、java.sql 和 java.util 包。
import— 如果被指定,必须出现在 JSP 文件的开始处。
contentType— 可以是任何值(如 text/HTML、text/XML 等)。
include 伪指令
include 伪指令用来包含来自于 JSP/HTML 的数据。语法如下:
<%@ include file="relativeURLspec" %>
脚本元素
脚本编制元素用来声明 JSP 页面中使用的 Java 变量和方法。语法如下:
<%! declaration(s) %>
所支持的脚本编制元素如下:
scriptlet
scriptlet 可以包含任何有效(Java)代码段。这些代码段将被放到用于 JSP 页面的 Java 类的服务函数中。语法如下:
<% scriptlet %>
表达式(expression)
表达式是数据类型的字符串表示。JSP 处理器在运行时对表达式求值,并将表达式转换成字符串。语法如下:
<%= expression %>
隐式对象
当创建 JSP 页面时,我们具有对某些隐式对象的访问权。可以在 scriptlet 和表达式中使用这些对象,而不必首先声明它们。每个隐式对象都具有一个在核心 Java 技术或 com.ibm.db2e.jsp.server 包中定义的类。隐式对象的声明如 表 1所示。
表 1. 隐式对象
隐式变量 | 类型 | 表示 |
request | com.ibm.db2e.jsp.server.MiniHttpRequest | 对 JSP 页面的请求。 |
response | com.ibm.db2e.jsp.server.MiniHttpResponse | 对请求的响应。 |
in | java.io.BufferedReader | 此对象当前不可用。 |
out | java.io.PrintStream | 写入 Web 浏览器的对象。 |
exception | java.lang.Throwable | 执行 JSP 页面期间抛出的异常。 |
用于数据库访问的定制标记
可以在 JSP 应用程序中使用以下定制标记来访问 DB2 Everyplace 数据库:
< tsx:dbconnect >
该标记使用 DB2 Everyplace JDBC 驱动程序建立与指定的 DB2 Everyplace 数据库的连接。语法如下:
<tsx:dbconnect
id="connection_id"
driver="com.ibm.db2e.jdbc.DB2eDriver"
url="jdbc:db2e:database">
</tsx:dbconnect>
其中
id — 指定此连接的标识符。不要在 JSP 页面中重用此名称。该属性是必需的。
driver — 指定 DB2 Everyplace JDBC 驱动程序。该属性是必需的。
url — 指定 DB2 Everyplace 数据库。jdbc:db2e:database 变量中的项 database 表示 DB2 Everyplace 数据库的路径。该属性是必需的。
< tsx:dbquery >
此标记使用通过 <tsx:dbconnect> 标记指定的连接将查询提交给数据库,并生成一个 java.sql.ResultSet 对象,在该对象中游标指向结果集的第一行。可以使用此查询的标识符和 java.sql.ResultSet 的 DB2 Everyplace JDBC 接口引用此结果集。语法如下:
<tsx:dbquery id="query_id" connection="connection_id" limit="value">
select_SQL_statement
</tsx:dbquery>
其中
id — 指定此查询的标识符。不要在 JSP 页面中重用此查询标识符。该属性是必需的。
connection — 指定此 JSP 文件中 <tsx:dbconnect> 标记的标识符。该属性是必需的。
limit — 指定查询可以返回的最大行数。该属性是可选的。
select_SQL_statement — 指定想要提交给数据库的 SQL 查询。此 SQL 查询语句可以包含动态数据。
< tsx:dbmodify >
此标记使用通过 < tsx:dbconnect > 标记指定的连接来提交命令,以修改数据库内的数据。语法如下:
<tsx:dbmodify connection="connection_id">
modify_command
</tsx:dbmodify