Java Servlet做爲首選的服務器端數據處理技術,正在迅速取代CGI腳本。Servlet超越CGI的優點之一在於,不只多個請求能夠共享公用資源,並且還能夠在不一樣用戶請求之間保留持續數據。本文介紹一種充分發揮該特點的實用技術,即數據庫鏈接池。數據庫
1、實現鏈接池的意義安全
動態Web站點每每用數據庫存儲的信息生成Web頁面,每個頁面請求致使一次數據庫訪問。鏈接數據庫不只要開銷必定的通信和內存資源,還必須完成用戶驗證、安全上下文配置這類任務,於是每每成爲最爲耗時的操做。固然,實際的鏈接時間開銷變幻無窮,但1到2秒延遲並不是不常見。若是某個基於數據庫的Web應用只需創建一次初始鏈接,不一樣頁面請求可以共享同一鏈接,就能得到顯著的性能改善。
Servlet是一個Java類。Servlet引擎(它多是Web服務軟件的一部分,也多是一個獨立的附加模塊)在系統啓動或Servlet第一次被請求時將該類裝入Java虛擬機並建立它的一個實例。不一樣用戶請求由同一Servlet實例的多個獨立線程處理。那些要求在不一樣請求之間持續有效的數據既能夠用Servlet的實例變量來保存,也能夠保存在獨立的輔助對象中。
用JDBC訪問數據庫首先要建立與數據庫之間的鏈接,得到一個鏈接對象(Connection),由鏈接對象提供執行SQL語句的方法。本文介紹的數據庫鏈接池包括一個管理類DBConnectionManager,負責提供與多個鏈接池對象(DBConnectionPool類)之間的接口。每個鏈接池對象管理一組JDBC鏈接對象,每個鏈接對象能夠被任意數量的Servlet共享。
類DBConnectionPool提供如下功能:服務器
1) 從鏈接池獲取(或建立)可用鏈接。
2) 把鏈接返回給鏈接池。
3) 在系統關閉時釋放全部資源,關閉全部鏈接。性能
此外, DBConnectionPool 類還可以處理無效鏈接(原來登記爲可用的鏈接,因爲某種緣由再也不可用,如超時,通信問題),並可以限制鏈接池中的鏈接總數不超過某個預約值。
管理類DBConnectionManager用於管理多個鏈接池對象,它提供如下功能:spa
1) 裝載和註冊JDBC驅動程序。
2) 根據在屬性文件中定義的屬性建立鏈接池對象。
3) 實現鏈接池名字與其實例之間的映射。
4) 跟蹤客戶程序對鏈接池的引用,保證在最後一個客戶程序結束時安全地關閉全部鏈接池。線程