2.5 用連接池提高Servlet訪問數(shù)據(jù)庫(kù)的效率
Java Servlet作為首選的服務(wù)器端數(shù)據(jù)處理技術(shù),正在迅速取代CGI腳本。Servlet超越CGI的優(yōu)勢(shì)之一在于,不僅多個(gè)請(qǐng)求可以共享公用資源,而且還可以在不同用戶請(qǐng)求之間保留持續(xù)數(shù)據(jù)。本文介紹一種充分發(fā)揮該特色的實(shí)用技術(shù),即數(shù)據(jù)庫(kù)連接池。
一、實(shí)現(xiàn)連接池的意義
動(dòng)態(tài)Web站點(diǎn)往往用數(shù)據(jù)庫(kù)存儲(chǔ)的信息生成Web頁面,每一個(gè)頁面請(qǐng)求導(dǎo)致一次數(shù)據(jù)庫(kù)訪問。連接數(shù)據(jù)庫(kù)不僅要開銷一定的通訊和內(nèi)存資源,還必須完成用戶驗(yàn)證、安全上下文配置這類任務(wù),因而往往成為最為耗時(shí)的操作。當(dāng)然,實(shí)際的連接時(shí)間開銷千變?nèi)f化,但1到2秒延遲并非不常見。如果某個(gè)基于數(shù)據(jù)庫(kù)的Web應(yīng)用只需建立一次初始連接,不同頁面請(qǐng)求能夠共享同一連接,就能獲得顯著的性能改善。
Servlet是一個(gè)Java類。Servlet引擎(它可能是Web服務(wù)軟件的一部分,也可能是一個(gè)獨(dú)立的附加模塊)在系統(tǒng)啟動(dòng)或Servlet第一次被請(qǐng)求時(shí)將該類裝入Java虛擬機(jī)并創(chuàng)建它的一個(gè)實(shí)例。不同用戶請(qǐng)求由同一Servlet實(shí)例的多個(gè)獨(dú)立線程處理。那些要求在不同請(qǐng)求之間持續(xù)有效的數(shù)據(jù)既可以用Servlet的實(shí)例變量來保存,也可以保存在獨(dú)立的輔助對(duì)象中。
用JDBC訪問數(shù)據(jù)庫(kù)首先要?jiǎng)?chuàng)建與數(shù)據(jù)庫(kù)之間的連接,獲得一個(gè)連接對(duì)象(Connection),由連接對(duì)象提供執(zhí)行SQL語句的方法。本文介紹的數(shù)據(jù)庫(kù)連接池包括一個(gè)管理類DBConnectionManager,負(fù)責(zé)提供與多個(gè)連接池對(duì)象(DBConnectionPool類)之間的接口。每一個(gè)連接池對(duì)象管理一組JDBC連接對(duì)象,每一個(gè)連接對(duì)象可以被任意數(shù)量的Servlet共享。
類DBConnectionPool提供以下功能:
1) 從連接池獲取(或創(chuàng)建)可用連接。
2) 把連接返回給連接池。
3) 在系統(tǒng)關(guān)閉時(shí)釋放所有資源,關(guān)閉所有連接。
此外, DBConnectionPool類還能夠處理無效連接(原來登記為可用的連接,由于某種原因不再可用,如超時(shí),通訊問題),并能夠限制連接池中的連接總數(shù)不超過某個(gè)預(yù)定值。
管理類DBConnectionManager用于管理多個(gè)連接池對(duì)象,它提供以下功能:
1) 裝載和注冊(cè)JDBC驅(qū)動(dòng)程序。
2) 根據(jù)在屬性文件中定義的屬性創(chuàng)建連接池對(duì)象。
3) 實(shí)現(xiàn)連接池名字與其實(shí)例之間的映射。
4) 跟蹤客戶程序?qū)B接池的引用,保證在最后一個(gè)客戶程序結(jié)束時(shí)安全地關(guān)閉所有連接池。
本文余下部分將詳細(xì)說明這兩個(gè)類,最后給出一個(gè)示例演示Servlet使用連接池的一般過程。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |