web數據庫連接技術
常見的web數據庫連接技術有:cgi技術、webapi技術、rad技術和jdbc技術等。最早出現的cgi技術得到了幾乎所有的web服務器的支持,但是存在著嚴重的缺陷,例如運行速度慢、開發困難和可移植性差等。webapi的出現克服了速度問題,但是開發更加困難。各種不同的api互不兼容,使用范圍極其受限。rad技術(快速開發技術)從根本上該改變了開發困難的現狀,但是它和特定的web服務器的依賴性很強,缺乏通用性。
jdbc(java database connectivity)技術的最大優勢是它為所有數據庫管理系統提供一種標準接口,可以為多種關系數據庫提供統一訪問,大致可以分為以下三個部分:
◆ jdbc api的主要特點之一是簡單且容易掌握。它主要由接口組成而不是集成類,被包含在java.sql和javax.sql兩個包中。這些接口由提供jdbc驅動的軟件商來完成。
◆ jdbc驅動管理器的作用是在jdbc運行結構上,提供最基礎的指引功能,即當一個jdbc api程序進行數據庫調用時,它會選擇一個正確的jdbc驅動程序進行連接。
◆ jdbc驅動的作用是當jdbc api制作的程序進行數據調用時,實際連接數據庫并進行相應的處理。jdbc驅動提供jdbc api的接口類。
jsp技術
jsp技術的特點
java server page(jsp)是使用java代碼動態生成html文檔的web頁面摸板。jsp運行于服務器端組件,稱為jsp容器,它將jsp轉化成等價的java servlet。正因為如此,servlet和jsp頁面最終是相關的。jsp頁面具有了servlet的所有優點,如良好的性能和擴展性,對http會話提供嵌入式支持等。同時jsp頁面還具有自身的優點,如需要時自動重新編譯和與工具具有更大的兼容性。
jsp容器基于每個文件的時間戳自動管理jsp頁面。當對一個jsp頁面的請求發出后,容器首先判斷與.jsp文件對應的類的名字。
如果該類不存在或比.jsp文件的老,然后容器為一個等價的servlet創建java源碼并編譯它。如果servlet實例并未運行,容器載入該servlet類并創建一個實例。最后,容器發送一個線程在載入的實例中處理當前的http請求。所以,一個jsp頁面有三種存在形式,即jsp源碼、java源碼和已編譯的java類。
jsp元素可以分為三種:偽指令、腳本元素(包含表達式、script和聲明)和動作。其中,偽指令是指示jsp容器生成什么代碼的命令;在表達式和script中可以使用9個隱含對象;行為是創建、修改或使用對象的高層jsp元素,使用嚴格的xml語法編碼。
利用jsp實現web與數據庫的連接
java使用jdbc技術處理數據庫是一種綜合、通用方式,實現與數據庫的連接,執行查詢和提取數據等操作。很多關系數據庫管理系統都帶有jdbc驅動程序。具體步驟如下:
1.完成環境設置,導入java.sql包,命令如下:
#import java.sql.*
2.載入驅動器
jdbc規范依據驅動器結構將驅動器劃分為jdbc-odbc橋、純java到數據庫中間件和純java直接到數據庫幾種類型。在此,采用本地api與部分java類型驅動器,顯式創建一個如下的驅動器實例并用驅動器管理器注冊:
drivermanager.registerdriver(new oracle.jdbc.driver.oracledriver());
3.連接到數據庫
驅動器管理器保留已注冊驅動器列表,調用其getconnection()方法得到connection對象。其中getconnection()的參數分別是數據庫服務器的ip地址、端口號、庫名和登錄數據庫所需的賬號與密碼,示例如下:
connection conn= dirvermanager.getconnection(
"jdbc:oracle:thin:@localhost:1521:demo","username","password");
4.語句接口
sql語言由從一個關系數據庫中創建、表示和抽取數據的語句組成。jdbc提供的這些sql語句的面向對象的表示用以封裝其文本、執行狀態和結果。這種表示稱為java.sql.statement接口。使用預編譯sql的preparedstatement和調用存儲過程的callablestatement這兩個子接口擴展了statement的功能,示例如下:
statement stmt=conn.createstatement();
5.獲得結果集
一個結果集是表格行的排序列表,使用jdbc中的java.sql.resultset接口表示。結果集由statement接口的executequery()方法或一些元數據方法調用產生,示例如下:
resultset rs=stmt.executequery(sql);
利用連接池優化訪問效率
在本實例中,應用層使用weblogic 6.1,數據庫層采用oracle8.1.6,客戶端使用navigate瀏覽器。
實例
在本實例中建立一個命名為connectionpool的連接池。connectionpool的基本屬性如下:
m_connectionpoolsize 連接池中連接數量下限;
m_connectionpoolmax 連接池中連接數量上限;
m_connectionusecount 一個連接的最大使用次數;
m_connectiontimeout 一個連接的最長空閑時間;
m_maxconnections = -1 同一時間的最大連接數;
m_timer 定時器。
這些屬性定義了連接池與其中的每個連接的有效狀態值。
連接池的自我管理,實際上就是通過定時地對每個連接的狀態和連接的數量進行判斷而進行相應操作。
這里可以定義出connectionpool要完成管理所需要的基本接口,具體見下:
public class connectionpool implements timerlistener{
public boolean initialize() //連接池初始化
public void destroy() //連接池的銷毀
public synchronized java.sql.connection getconnection() //取一個連接
public synchronized void close() //關閉一個連接
private synchronized void removefrompool() //把一個連接從連接池中刪除
private synchronized void fillpool() //維護連接池大小
public synchronized void timerevent() //定時器事件處理函數
}
通過這幾個接口,已經可以完成連接池的基本管理。在timeevent()函數中完成連接池的狀態檢驗工作,fillpool()時連接池至少保持最小連接數。因為用戶要保存每一個連接的狀態,所以還需要一個數據庫連接對象見下:
class connectionobject{
public java.sql.connection con; public boolean inuse; //是否被使用標志
public long lastaccess; //最近一次開始使用時間
public int usecount; //被使用次數
}
加入了connectionobject對象后,在connectionpool中操作的應該只是connectionobject,而其它進程需要的只是connectionobject的con屬性。因此這里再加入如下一個類,作為其它進程獲得與返回連接的接口:
class conn{
getconnection(); //從連接池中取出一個有效連接
closeconnection(); //返回連接,此時并沒有關閉連接,只是放回了連接池
destroypool(); //銷毀連接池
}
目前采用jsp技術構建b/s結構的web數據庫系統是比較流行的方式,同時采用數據庫連接池的系統在效率和穩定性上比采用傳統的其它方式的系統要好得多。數據庫連接池是一種對整個系統中比較復雜的問題的一種可行的解決辦法。但在實際應用中,jdbc連接只是大型web應用系統的一小部分,數據庫連接池管理程序與web服務器、jsp引擎和rdbms引擎的管理策略都有可能發生沖突。用戶應該全面考慮系統中的各個部分,這樣才能充分發揮其高效性。
新聞熱點
疑難解答