成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從JSP數據庫的連接看J2EE服務器和連接池的必要性

開發 后端
本文介紹了JSP數據庫的連接方法。對于JSP來說一個很好的J2EE服務器是很必要的,數據庫連接池也是十分必要的。

最近我作了JSP數據庫的頻繁連接,在此給出數據庫連接池的必要性,對于JSP來說一個很好的J2EE服務器是很必要的,JBOOS,WebLogic都是很好的解決方案。

一般情況下,在使用開發基于數據庫的WEB程序時,傳統的模式基本是按以下步驟:

1. 在主程序(如Servlet、Beans)中建立數據庫連接。

2. 進行SQL操作,取出數據。

3. 斷開數據庫連接。

使用這種模式開發,存在很多問題。首先,我們要為每一次WEB請求(例如察看某一篇文章的內容)建立一次數據庫連接,對于一次或幾次操作來講,或許你覺察不到系統的開銷,但是,對于WEB程序來講,即使在某一較短的時間段內,其操作請求數也遠遠不是一兩次,而是數十上百次(想想全世界的網友都有可能在您的網頁上查找資料),在這種情況下,系統開銷是相當大的。事實上,在一個基于數據庫的WEB系統中,建立數據庫連接的操作將是系統中代價最大的操作之一。很多時候,可能您的網站速度瓶頸就在于此。

其次,使用傳統的模式,你必須去管理每一個連接,確保他們能被正確關閉,如果出現程序異常而導致某些連接未能關閉,將導致數據庫系統中的內存泄露,最終我們將不得不重啟數據庫。

針對以上問題,我們首先想到可以采用一個全局的Connection對象,創建后就不關閉,以后程序一直使用它,這樣就不存在每次創建、關閉連接的問題了。但是,同一個連接使用次數過多,將會導致連接的不穩定,進而會導致WEB SERVER的頻頻重啟。故而,這種方法也不可取。實際上,我們可以使用JSP數據庫連接池技術來解決上述問題。首先,介紹一下連接池技術的基本原理。顧名思義,連接池最基本的思想就是預先建立一些連接放置于內存對象中以備使用:

連接池最基本的思想 

如圖所示,當程序中需要建立數據庫連接時,只須從內存中取一個來用而不用新建。同樣,使用完畢后,只需放回內存即可。而連接的建立、斷開都有連接池自身來管理。同時,我們還可以通過設置連接池的參數來控制連接池中的連接數、每個連接的最大使用次數等等。通過使用連接池,將大大提高程序效率,同時,我們可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。下面我們以一個名為ConnectionPool的連接池為例來看看連接池的實現。先看看ConnectionPool的基本屬性:

m_ConnectionPoolSize:連接池中連接數量下限

m_ConnectionPoolMax:連接池中連接數量上限

m_ConnectionUseCount:一個連接的最大使用次數

m_ConnectionTimeout:一個連接的最長空閑時間

m_MaxConnections = -1:同一時間的最大連接數

m_timer:定時器

這些屬性定義了連接池與其中的每個連接的有效狀態值。連接池的自我管理,實際上就是通過定時的對每個連接的狀態、連接的數量進行判斷而進行相應操作。其管理流程如下:

通過定時的對每個連接的狀態、連接的數量進行判斷而進行相應操作 

通過上圖,我們可以定義出ConnectionPool要完成管理所需要的基本接口:

  1. public class ConnectionPool implements TimerListener{  
  2.   public boolean initialize() //連接池初始化   
  3.   public void destroy() //連接池的銷毀   
  4.   public synchronized java.sql.Connection getConnection() //取一個連接   
  5.   public synchronized void close() //關閉一個連接   
  6.   private synchronized void removeFromPool() //把一個連接從連接池中刪除   
  7.   private synchronized void fillPool() //維護連接池大小   
  8.   public synchronized void TimerEvent() //定時器事件處理函數   

通過這幾個接口,已經可以完成連接池的基本管理。在TimeEvent()函數中完成連接池的狀態檢驗工作,fillPool()時連接池至少保持最小連接數。因為我們要保存每一個連接的狀態,所以還需要一個數據庫連接對象:

  1. class ConnectionObject{  
  2.   public java.sql.Connection con; public boolean inUse; //是否被使用標志   
  3.   public long lastAccess; //最近一次開始使用時間   
  4.   public int useCount; //被使用次數  

加入了ConnectionObject對象后,在ConnectionPool中操作的應該只是ConnectionObject,而其他進程需要的只是ConnectionObject的con屬性,因此我們再加入一個類,作為其他進程獲得與返回連接的接口:

  1. CLASS Conn{  
  2.   GetConnection(); //從連接池中取出一個有效連接   
  3.   CloseConnection(); //返回連接,此時并沒有關閉連接,只是放回了連接池   
  4.   DestroyPool(); //銷毀連接池   

最后我們的整個JSP數據庫系統總的架構如下:

整個系統總的架構 

通過上面的介紹,我們可以看出,連接池技術的關鍵就是其自身的管理機制。以上的JSP數據庫管理流程只是本人一點見解,關鍵是想向大家介紹一種思路,在此基礎上,您可以進一步完善連接池技術為您所用。

【編輯推薦】

  1. 淺談如何在JSP連接MySQL數據庫
  2. 使用JDBC連接數據庫
  3. 在JSP中獲取數據庫連接
  4. 淺談JSP數據庫連接池的必要性
  5. JSP數據庫操作例程(JDBC-ODBC)
責任編輯:yangsai 來源: 百度空間
相關推薦

2009-07-03 17:37:54

JSP數據庫

2009-06-19 10:28:00

JDBC連接數據庫

2009-07-17 13:32:49

JDBC數據庫

2010-03-18 15:09:15

python數據庫連接

2011-11-08 21:19:25

2019-11-27 10:31:51

數據庫連接池內存

2009-06-24 07:53:47

Hibernate數據

2009-06-10 14:10:23

J2EE學習J2EE是什么

2011-06-30 09:49:40

JSPJ2EE

2009-06-10 13:37:06

J2EE可伸縮性J2EE靈活性J2EE維護

2018-10-10 14:27:34

數據庫連接池MySQL

2009-07-03 13:10:06

SQL Server2tomcatJSP

2009-06-22 17:34:40

J2EE架構

2009-06-23 08:06:46

J2EE體系架構J2EE模型J2EE設計模式

2009-06-23 16:48:26

J2EE常見問題J2EE平臺

2011-05-19 09:53:33

數據庫連接池

2018-01-03 14:32:32

2017-06-22 14:13:07

PythonMySQLpymysqlpool

2009-07-02 13:58:29

JSP和J2EE

2021-08-31 11:29:55

無服務器服務器云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩高清 | 日韩在线观看网站 | 九九久久精品视频 | 99久久精品国产一区二区三区 | 精品久久久久久久人人人人传媒 | 五月激情六月婷婷 | 日韩午夜影院 | 久久久精品一区二区三区四季av | 在线视频一区二区 | 国产在线一区二区三区 | 91传媒在线观看 | 国产91久久精品一区二区 | 亚洲国产一区二区在线 | 美女操网站 | 毛片站| 成人精品视频在线观看 | 国产一区二区三区 | av中文字幕在线观看 | 99福利视频导航 | 亚洲精品欧洲 | av不卡一区 | 国产成人福利在线观看 | 99精品免费视频 | 欧美日韩在线一区二区 | 精品一区二区久久久久久久网精 | 一区在线观看视频 | 欧美日韩综合一区 | 狠狠色综合欧美激情 | 国产一区二区三区视频 | 久久久www成人免费无遮挡大片 | 欧美日韩久久精品 | 国产精品无码专区在线观看 | 国产精品99一区二区 | 在线观看毛片网站 | 午夜精品一区二区三区在线观看 | 国产精品久久久久久久午夜 | 亚洲精品一区二区三区中文字幕 | 午夜精品视频 | 国产精品美女www | 91综合网 | 欧美一级久久精品 |