應當盡量避免使用JSPs實現復雜邏輯
那種程序也許容易寫
但難以調試而且幾乎不可能被理解和維護
好的解決方案是用JSPs負責Web頁面的顯示(這正是JSPs擅長的)
把復雜邏輯的實現交給Java
如對數據庫的訪問
這樣
程序不但比較容易實現和調試
而且易於理解和維護
這個Web應用程序可以運行在專用Web服務器或者是個人電腦上
操作系統可以是Windows
Linux
或者Mac OS
所需的軟件包有Java運行時環境(JDK
或以上版本)
Tomcat最新版本(Tomacat
或以上版本)
以及Ant開發工具(Ant
或以上版本)
Ant用於創建Web應用程序包(WAR)
以及在Tomcat上安裝部署WAR文件
配置關系數據庫接口javax
sql
DataSource
所有以上提到的軟件包都可以通過Internet免費獲得
這個Web應用程序還需要一個數據庫
幾乎所有支持SQL而且有JDBC驅動的關系數據庫都可以
MySQL是一個符合條件的不錯選擇
從可以得到MySQL的最新版本以及它的JDBC驅動Connector/J
為了讓Ant與Tomact管理軟件協同工作
需要將catalina
ant
jar從Tomcat的server/lib目錄拷貝到Ant的lib目錄下
將你的數據庫JDBC驅動程序復制到Tomcat的common/lib目錄下使Tomcat和其上的Web應用程序可以訪問數據庫
最後
必須建立Tomcat的admin和manager角色(roles)
及其用戶名和密碼
編輯Tomcat的conf目錄下的tomcat
user
xml文件如下
<?xml version=
?>
<tomcat
users>
<role rolename=
admin
/>
<role rolename=
manager
/>
<user username=
tomcatusername
password=
tomcatpassword
roles=
admin
manager
/>
</tomcat
users>
我的開發環境是Apple Cube
運行Mac OS X
操作系統
軟件包JDK
Tomcat
Ant
MySQL
及Connector/J
beta
操作系統升級到Mac OS X
未出現任何問題
同樣Tomcat升級到
也沒出現問題
Web應用程序 本文通過一個叫做AddressBook的簡單地址簿程序來說明如何應用將要介紹的技術
這個應用程序的目的不是建立一個地址簿的正式版本
它僅僅是一個例子
AddressBook中的Java程序 AddressBook中包含三個Java程序
圖
顯示了他們在Tomcat中的是如何使用的
educity
cn/img_
/
/
/
jpg>
AddressBook
ContextListener
AddressBook
ContextListener是一個servlet上下文監聽器
它在AddressBook開始和關閉時被調用
可以使用AddressBook的部署描述文件web
xml配置
當AddressBook開始運行時
創建一個AddressesDB的實例並將它作為一個上下文屬性保存
而當AddressBook運行結束時
從上下文屬性中取出AddressesDB對象並關閉數據庫連接
在運行過程中
當JSPs需要連接數據庫
它們將訪問上下文屬性中的AddressesDB對象
細節請看ContextListener
java的完整的
帶有注釋的源代碼
AddressBook
AddressesDB
AddressBook
AddressesDB用於操作地址數據庫
它的構造函數建立一個數據庫連接
這個會話可以被多個Web會話共享
這個類提供多個數據庫連接函數
; getAddress(id)返回用id標識的地址
如果地址沒找到則返回null
; addAddress(address)添加地址並返回改變的行數
; deleteAddress(id)刪除地址並返回改變的行數
; getAddresses()返回數據庫中所有地址的聚集
如果數據庫無效返回null
; close()關閉數據庫連接
細節請看AddressesDB
java的完整的
帶有注釋的源代碼
AddressBook
Address
AddressBook
Address是用於描述地址的類
在用JSPs編程時
用類集中描述數據仍不失為一個好的方法
在AddressBook中使用的就是這種方法
AddressBook
Address的構造函數將地址內容保存於對象中
這個類中包括取得單個地址域的普通get函數
兩個獲取合並的地址域的get函數
以及一個地址比較函數
; Address(id
surname
fisrtname
street
district
city
postcode)
; getId()
; getSurname()
; getFirstname()
; getStreet()
; getDistrict()
; getCity()
; getPostcode()
; getFullname()返回firstname+
+surname
; getFulladdress()返回street+
+district+
+city+
+postcode
; compareTo(address)返回負整數
零
正整數
分別對應surname和firstname大於
等於
小於這個surname和firstname
比較是大小寫不敏感的
在存儲地址聚集時使用
細節請看Address
java的完整的
帶有注釋的源代碼
AddressBook中的JSP頁面 AddressBook有七個JSP頁
每個代表一個對AddressBook數據庫進行獨立操作的Web頁
每個頁面數據庫的狀態與前頁數據庫的狀態是相互獨立的
如果數據庫被其他用戶改變了
Web頁面將檢測到並產生相應的動作
例如
如果你正在修改一個地址而另一個用戶在確認修改之前刪除了該地址
JSP將通知你修改不存在的地址失敗
圖
顯示JSPs之間的邏輯關系
educity
cn/img_
/
/
/
jpg>
Home
jsp是AddressBook的主頁
也就是用戶使用AddressBook時見到的第一個頁面
它用一個表顯示Address庫中的所有地址
表中的每一行顯示一個地址
以及刪除或修改地址的連接
頁面底部有一個添加新地址的連接
配置信息見web
xml notes
; 添加地址連接將控制權交給RequestAdd
jsp
; 刪除地址連接將控制權交給RequestDelete
jsp
同時將要刪除的地址id傳遞給該頁
; 修改地址連接將控制權交給RequestModify
jsp
同時將要修改的地址id傳遞給該頁
細節請看Home
jsp的完整的
帶有注釋的源代碼
RequestAdd
jsp
RequestAdd
jsp提供一個地址表單用於輸入新地址
頁面底部的取消連接可以取消這次操作
; 提交表單將新的地址域值以及控制權交給DoAdd
jsp
; 取消操作將控制權交給Home
jsp
細節請看RequestAdd
jsp的完整的
帶有注釋的源代碼
DoAdd
jsp
DoAdd
jsp顯示接收到的地址域值
然後將新地址添加到數據庫並顯示是否成功的信息
頁面底部有一個繼續連接
; 點擊繼續連接回到Home
jsp
細節請看DoAdd
jsp的完整的
帶有注釋的源代碼
RequestDelete
jsp
RequestDelete
jsp讀取得到的id相應的地址
該頁面在表中顯示地址域以便讓你確認刪除的是正確的地址
頁面底部的兩個連接分別是繼續請求的繼續連接和取消請求的取消連接
; 選擇繼續連接將轉到DoDelete
jsp並傳遞要刪除的地址id
; 選擇取消連接回到Home
jsp
細節請看RequestDelete
jsp的完整的
帶有注釋的源代碼
DoDelete
jsp
DoDelete
jsp讀取傳遞給它的id
在表中顯示該id對應的地址
從數據庫中刪除它
並顯示是否成功
頁面底部是繼續連接
; 選擇繼續連接回到Home
jsp
細節請看DoDelete
jsp的完整的
帶有注釋的源代碼
RequestModify
jsp
RequestModify
jsp顯示一個表單並填入當前的地址
同時提供提交按鈕和取消連接
; 提交表單將新的地址域值以及控制權交給DoModify
jsp
; 選擇取消連接回到Home
jsp
細節請看RequestModify
jsp的完整的
帶有注釋的源代碼
DoModify
jsp
DoModify
jsp顯示接收到的修改的地址域值
然後修改數據庫中的地址記錄
並返回成功與否
頁面底部是繼續連接
; 選擇繼續連接回到Home
jsp
細節請看DoModify
jsp的完整的
帶有注釋的源代碼
AddressBook的Addresses數據庫表
如何建立數據庫取決於所用的數據庫軟件
若你用的不是MySQL以下的步驟就需要根據情況修改
AddressBook只有一個表Addresses
保存在數據庫Public中
表Addresses有七個域
; id
主鍵
自動增長的數據域
; surname
長度為
的字符域
保存聯系人的姓
; firstname
長度為
的字符域
保存聯系人的名
; street
長度為
的字符域
保存地址的第一行
; district
長度為
的字符域
保存地址的第二行
; city
長度為
的字符域
保存城市名
; postcode
長度為
的字符域
保存郵政編碼
首先建立MySQL數據庫(Mac OS X
)
用管理員權限啟動mysql命令行工具
需要的話輸入密碼
創建Public數據庫
以及賬號mysqlusername密碼mysqlpassord
命令如下
# mysql
u root
p
mysql> create database Public;
mysql> grant all privileges on Public
* to mysqlusername@localhost identified by
mysqlpassword
wi
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28752.html