簡介
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>
其中
connection — 指定此 JSP 文件中 <tsx:dbconnect> 標記的標識符。該屬性是必需的。
modify_command — 指定要提交到數據庫以修改數據的 SQL 命令。此修改命令可以包含動態數據。
< tsx:repeat >
此標記用來循環遍歷查詢結果中的每一行。start 和 stop 屬性控制循環過程。如果未指定 start 和 stop 屬性,當結果集的游標(通過 < tsx:getProperty > 標記引用)到達結果集的末尾時循環終止。可以嵌套此標記。語法如下:
<tsx:repeat index="name" start="starting_index" stop="ending_index">
repeat_block
</tsx:repeat>
其中
index — 指定此標記的循環變量的標識符。該屬性是可選的。
start — 指定處理重復塊之前要跳過的行數。缺省值為 0,該屬性是可選的。
stop — 指定此重復塊的結束循環變量值。缺省值是 2,147,483,647。該屬性是可選的。
repeat_block — 指定 HTML 標記塊,其中包含 < tsx:getProperty > 標記語法和用於格式化內容的 Html 標記。如果將 < tsx:getProperty > 標記放置在重復塊中,游標在每次處理重復塊時都會進到下一行。
< tsx:getProperty >
此標記獲取要在 JSP 頁(Html 結果頁)中顯示的 ResultSet bean 的值。如果將此標記放置在 < tsx:repeat> 重復塊內,ResultSet bean 的游標在每次處理重復塊時會進到下一行。語法如下:
<tsx:getProperty name="bean_name"
property="property_name" />
其中
name (必需)— 指定先前在該 JSP 文件的 < tsx:dbquery > 標記中聲明的 ResultSet bean 的名稱。
property (必需)— 指定要訪問的 ResultSet bean 的列。
有了這些信息,我們就可以著手構建 JSP 應用程序了,它將訪問我們先前創建的 DB2 Everyplace 表。
構建 JSP 應用程序
先前解壓縮得到的文件夾 c:\\sample\\jsp 包含 ITEMSelectView.jsp 文件,這是我們的應用程序。 ITEMSelectView.jsp 應用程序顯示 ITEM 表中存在的所有項。 ITEMSelectVIEw.JSp 利用了先前討論的 JSP 標記。
讓我們著手分析一些重要的代碼片段。首先我們將創建數據庫連接。
<tsx:dbconnect
id="conn"
url="jdbc:db2e:c:/sample/data/"
driver="com.ibm.db2e.jdbc.DB2eDriver">
</tsx:dbconnect>
我們在這裡指定的 URL 是數據庫的位置,在本例中是 c:/sample/data/ 。
我們通過使用下面所示的 < tsx:dbquery > 標記執行 SQL 查詢:
<tsx:dbquery connection="conn" id="Query1DBBean">
SELECT * FROM ITEM
</tsx:dbquery>
然後,我們用下面所示的 < tsx:getProperty > 檢索數據庫查詢的結果:
<tsx:getProperty name="Query1DBBean" property="ITEM_ID" />
這會從 ITEM_ID 列中檢索值。該技術對於我們希望檢索的其余列同樣有效。
接下來,我們將著手部署 JSP。
部署和測試 JSP
可以用 DB2 Everyplace 提供的微型 HTTP Web 服務器在 Windows 工作站上測試所開發的應用程序。在 Windows 上采用下列步驟測試您的應用程序:
浏覽至 DB2EVERYPLACE_LOCATION\\Clients\\JSP\\WIN32 。編輯文件 MiniHttpConfig.propertIEs ,並修改 JspPath= c:\\\\sample\\\\JSp 項使其指向您的 JSP 文件的位置。
執行 runJSPServer.bat 文件以執行 MiniHttpServer。
打開浏覽器並輸入 http://localhost/ITEMSelectVIEw.jsp 。您將收到下列消息,它表明 JSP 處理器已經成功編譯了我們的 JSP 文件。單擊 ITEMSelectVIEw.JSP 文件以查看結果。
DB2 Everyplace JSP Compiler
JSP page: c:\\sample\\JSp\\ITEMSelectVIEw.JSP
Parsing ...
Compiling ...
Done.
Try it: ITEMSelectVIEw.JSP
出現以下屏幕( 圖 1),它顯示了 Item 表中的數據。
圖 1. JSP 結果
圖片看不清楚?請點擊這裡查看原圖(大圖)。
接下來我們將著手在 Windows CE 設備上部署該應用程序。
在 Windows CE 設備上部署應用程序
在工作站上開發了 JSP 應用程序之後,只需將應用程序的類文件和用於執行 JSP 的微型 HTTP Web 服務器一起復制到移動設備上。
下列步驟可以用於在 Windows CE 設備上部署該應用程序(或任何 JSP 應用程序)。
下載並安裝用於移動設備的 J9 JVM 運行時環境。
將下列文件從開發工作站復制到移動設備的 Windows 目錄: DB2EVERYPLACE_LOCATION \\ClIEnts\\WinCE\\database\\ver\\processor_type\\DB2e.dll
DB2EVERYPLACE_LOCATION \\ClIEnts\\WinCE\\database\\ver\\processor_type\\db2ejdbc.dll
DB2EVERYPLACE_LOCATION\\ClIEnts\\WinCE\\database\\jdbc\\db2ejdbc.jar
其中 processor_type 是設備的處理器類型, ver 是設備的版本類型。
將下列文件從 DB2EVERYPLACE_LOCATION\\SDK\\JSP\\WINCE 復制到設備的根目錄。 miniJSP.jar
MiniHttpServer.lnk
將文件 MiniHttpConfig.properties 從 DB2EVERYPLACE_LOCATION\\ClIEnts\\JSP\\WIN32 復制到設備的根目錄。
打開 File Explorer 並單擊根目錄中的 MiniHttpServer 快捷方式以啟動 MiniHttpServer 服務器。
創建下列目錄: sample\\data
sample\\JSP
並將 c:\\sample\\JSp 中的 *.class 復制到設備上的 sample\\JSP ,並將 c:\\sample\\data 中的所有文件復制到設備上的 sample\\data 中。
在 Web 浏覽器中輸入下列 URL: http://localhost/ITEMSelectVIEw.JSP
您應該看到一個包含了 ITEM_ Desc 值的表。
結束語
在本文中,我們成功地創建和部署了一個 JSP 應用程序,它訪問存儲在 DB2 Everyplace 數據庫中的數據。我們還完成了在 Windows CE 設備上部署應用程序的步驟。可以進一步使用這些知識來開發用於 Windows CE/Pocket PC 設備的復雜 JSP 應用程序。
本文示例源代碼或素材下載