久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

JavaWeb——基礎(chǔ)知識(shí)-創(chuàng)新互聯(lián)

Java Web開(kāi)發(fā)的基礎(chǔ)內(nèi)容:

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)平谷免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
  • Servlet
  • javabean
  • jsp

一、基礎(chǔ)知識(shí):

  • Java Web是以線程為單位管理請(qǐng)求,處理能力更強(qiáng),占用的資源更少
  • CGI是以進(jìn)程為單位管理請(qǐng)求的,Servlet解決相同數(shù)量的請(qǐng)求,卻占用較少的系統(tǒng)資源
  • Java Web核心的組件就是Servlet

1.HTTP協(xié)議(超文本傳輸協(xié)議):一種主流B/S架構(gòu)中應(yīng)用的通信協(xié)議

  • 無(wú)狀態(tài):服務(wù)端不會(huì)記錄客戶(hù)端每次提交的請(qǐng)求,服務(wù)器一旦響應(yīng)客戶(hù)端之后,就會(huì)結(jié)束本次的通信過(guò)程??蛻?hù)端下一次的請(qǐng)求是一個(gè)新的連接,和上一次通信沒(méi)有任何關(guān)系
  • 簡(jiǎn)單靈活:HTTP是基于請(qǐng)求(request)和響應(yīng)(response)的模型
  • 支持客戶(hù)端與服務(wù)端:支持主流的B/S架構(gòu)的通信以及C/S架構(gòu)的通信
    • C/S架構(gòu)可選的協(xié)議有多種,例如:TCP/IP,UDP,HTTP,而B(niǎo)/S架構(gòu)通常只支持HTTP協(xié)議

2.服務(wù)器:通常由硬件和軟件部分構(gòu)成,統(tǒng)一對(duì)用戶(hù)提供多種不同的服務(wù)

  • 硬件:包括響應(yīng)的CPU、內(nèi)存、磁盤(pán)等等
  • 軟件:包括操作系統(tǒng)、運(yùn)行環(huán)境、服務(wù)器軟件、數(shù)據(jù)庫(kù)等等

1)web服務(wù)器:

  • web服務(wù)器是提供服務(wù)端程序運(yùn)行的一個(gè)環(huán)境,它本身也是一個(gè)軟件
    • 例如:將我們編寫(xiě)HTML文件放入到web服務(wù)器中,那么外界就可以通過(guò)瀏覽器訪問(wèn)我們的html頁(yè)面
  • 常見(jiàn)的web服務(wù)器有Apache,Tomcat、Jetty、Nginx等等
    • Tomcat、Jetty這些web服務(wù)器更準(zhǔn)確的說(shuō)是一個(gè)Servlet容器

3.JavaWeb項(xiàng)目結(jié)構(gòu)!?。?/p>

項(xiàng)目根目錄,例如:myweb、ch01通常存放靜態(tài)資源文件(如:html等等)
WEB-INF這個(gè)目錄是當(dāng)前項(xiàng)目私有的一個(gè)文件夾,只能提供給項(xiàng)目?jī)?nèi)部訪問(wèn),對(duì)于客戶(hù)端來(lái)說(shuō)是訪問(wèn)不到了,通常這個(gè)目錄下存放的是Java源代碼、編譯后的字節(jié)碼文件以及Servlet的核心配置文件web.xml
src存放java源代碼的目錄
classes存放編譯后的字節(jié)碼文件
liblib目錄存放當(dāng)前項(xiàng)目所需要的jar文件
JSP用于存放JSP動(dòng)態(tài)頁(yè)面
web.xml項(xiàng)目的配置文件,用于配置Servlet的請(qǐng)求映射、過(guò)濾器、監(jiān)聽(tīng)器等等信息。每一個(gè)web項(xiàng)目都對(duì)應(yīng)一個(gè)web.xml配置文件
META-INF配置應(yīng)用程序、擴(kuò)展程序、類(lèi)加載服務(wù)等等

二、servlet和jsp對(duì)比

1. servlet 和 jsp 的區(qū)別:????????

  • Servlet在Java代碼中可以通過(guò)HttpServletResponse對(duì)象動(dòng)態(tài)輸出HTML內(nèi)容
  • JSP是在靜態(tài)HTML內(nèi)容中嵌入Java代碼,然后Java代碼在被動(dòng)態(tài)執(zhí)行后生成HTML內(nèi)容
  • jsp經(jīng)編譯后就變成了Servlet(JSP的本質(zhì)就是Servlet,JVM只能識(shí)別java的類(lèi),不能識(shí)別JSP的代碼,Web容器將JSP的代碼編譯成JVM能夠識(shí)別的java類(lèi))
  • jsp更擅長(zhǎng)表現(xiàn)于頁(yè)面顯示,servlet更擅長(zhǎng)于邏輯控制
  • Servlet中沒(méi)有內(nèi)置對(duì)象,內(nèi)置對(duì)象都是必須通過(guò)HttpServletRequest對(duì)象,HttpServletResponse對(duì)象以及HttpServlet對(duì)象得到
  • Jsp是Servlet的一種簡(jiǎn)化,使用Jsp只需要完成程序員需要輸出到客戶(hù)端的內(nèi)容,Jsp中的Java腳本如何鑲嵌到一個(gè)類(lèi)中,由Jsp容器完成
  • Servlet則是個(gè)完整的Java類(lèi),這個(gè)類(lèi)的Service方法用于生成對(duì)客戶(hù)端的響應(yīng)
  • 對(duì)于靜態(tài)HTML標(biāo)簽,Servlet都必須使用頁(yè)面輸出流逐行輸出

2. servlet 和 jsp 的各自特點(diǎn):

  • Servlet雖然能夠很好地組織業(yè)務(wù)邏輯代碼,但是在Java源文件中,因?yàn)槭峭ㄟ^(guò)字符串拼接的方式生成動(dòng)態(tài)HTML內(nèi)容,這樣就容易導(dǎo)致代碼維護(hù)困難、可讀性差
  • JSP雖然規(guī)避了Servlet在生成HTML內(nèi)容方面的劣勢(shì),但是在HTML中混入大量、復(fù)雜的業(yè)務(wù)邏輯

3. MVC模式使用 servlet 和 jsp:

  • Servlet只負(fù)責(zé)業(yè)務(wù)邏輯部分,而不會(huì)生成HTML代碼
  • JSP中不會(huì)充斥著大量的業(yè)務(wù)代碼,這樣能大提高了代碼的可讀性和可維護(hù)性

MVC模式(Model-View-Controller):軟件工程中的一種軟件架構(gòu)模式,分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)

  • Controller(Servlet)——負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理
  • View(JSP)——負(fù)責(zé)界面顯示
  • Model——業(yè)務(wù)功能編寫(xiě)(例如算法實(shí)現(xiàn))、數(shù)據(jù)庫(kù)設(shè)計(jì)以及數(shù)據(jù)存取操作實(shí)現(xiàn)

  • Web瀏覽器發(fā)送HTTP請(qǐng)求到服務(wù)端,然后被Controller(Servlet)獲取并進(jìn)行處理(例如參數(shù)解析、請(qǐng)求轉(zhuǎn)發(fā))
  • Controller(Servlet)調(diào)用核心業(yè)務(wù)邏輯——Model部分,獲得結(jié)果
  • Controller(Servlet)將邏輯處理結(jié)果交給View(JSP),動(dòng)態(tài)輸出HTML內(nèi)容
  • 動(dòng)態(tài)生成的HTML內(nèi)容返回到瀏覽器顯示

三、servlet

  • Java Servlet 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序
  • 是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶(hù)端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層
  • 使用 Servlet,以收集來(lái)自網(wǎng)頁(yè)表單的用戶(hù)輸入,呈現(xiàn)來(lái)自數(shù)據(jù)庫(kù)或者其他源的記錄,還可以動(dòng)態(tài)創(chuàng)建網(wǎng)頁(yè)

1. servlet的優(yōu)勢(shì)(與CGI相比):

  • 性能明顯更好(相同數(shù)量請(qǐng)求,占用系統(tǒng)資源更少)
  • Servlet 在 Web 服務(wù)器的地址空間內(nèi)執(zhí)行;這樣它就沒(méi)有必要再創(chuàng)建一個(gè)單獨(dú)的進(jìn)程來(lái)處理每個(gè)客戶(hù)端請(qǐng)求
  • Servlet 是獨(dú)立于平臺(tái)的,因?yàn)樗鼈兪怯?Java 編寫(xiě)的
  • 服務(wù)器上的 Java 安全管理器執(zhí)行了一系列限制,以保護(hù)服務(wù)器計(jì)算機(jī)上的資源。因此,Servlet 是可信的
  • Java 類(lèi)庫(kù)的全部功能對(duì) Servlet 來(lái)說(shuō)都是可用的。它可以通過(guò) sockets 和 RMI 機(jī)制與 applets、數(shù)據(jù)庫(kù)或其他軟件進(jìn)行交互

2.Servlet的生命周期

Servlet 生命周期可被定義為從創(chuàng)建直到毀滅的整個(gè)過(guò)程。以下是 Servlet 遵循的過(guò)程:

  • Servlet 通過(guò)調(diào)用?init ()?方法進(jìn)行初始化
    • init 方法被設(shè)計(jì)成只調(diào)用一次,用于一次性初始化,就像 Applet 的 init 方法一樣
    • 它在第一次創(chuàng)建 Servlet 時(shí)被調(diào)用,在后續(xù)每次用戶(hù)請(qǐng)求時(shí)不再調(diào)用
    • Servlet 創(chuàng)建于用戶(hù)第一次調(diào)用對(duì)應(yīng)于該 Servlet 的 URL 時(shí),但是您也可以指定 Servlet 在服務(wù)器第一次啟動(dòng)時(shí)被加載
  • Servlet 調(diào)用?service()?方法來(lái)處理客戶(hù)端的請(qǐng)求
    • service() 方法是執(zhí)行實(shí)際任務(wù)的主要方法
    • Servlet 容器(即 Web 服務(wù)器)調(diào)用 service() 方法來(lái)處理來(lái)自客戶(hù)端(瀏覽器)的請(qǐng)求,并把格式化的響應(yīng)寫(xiě)回給客戶(hù)端
    • 每次服務(wù)器接收到一個(gè) Servlet 請(qǐng)求時(shí),服務(wù)器會(huì)產(chǎn)生一個(gè)新的線程并調(diào)用服務(wù);service() 方法檢查 HTTP 請(qǐng)求類(lèi)型(GET、POST、PUT、DELETE 等),并在適當(dāng)?shù)臅r(shí)候調(diào)用 doGet、doPost、doPut,doDelete 等方法
  • Servlet 通過(guò)調(diào)用?destroy()?方法終止(結(jié)束)
    • destroy() 方法只會(huì)被調(diào)用一次,在 Servlet 生命周期結(jié)束時(shí)被調(diào)用
    • destroy() 方法可以讓您的 Servlet 關(guān)閉數(shù)據(jù)庫(kù)連接、停止后臺(tái)線程、把 Cookie 列表或點(diǎn)擊計(jì)數(shù)器寫(xiě)入到磁盤(pán),并執(zhí)行其他類(lèi)似的清理活動(dòng)
    • 在調(diào)用 destroy() 方法之后,servlet 對(duì)象被標(biāo)記為垃圾回收
  • 最后,Servlet 是由 JVM 的垃圾回收器進(jìn)行垃圾回收的

例:

第一次請(qǐng)求:

繼續(xù)請(qǐng)求:

3.servlet相關(guān)面試題

1)不同的用戶(hù)同時(shí)對(duì)同一個(gè)業(yè)務(wù)(如注冊(cè))發(fā)出請(qǐng)求,那這個(gè)時(shí)候容器里產(chǎn)生的有是幾個(gè)servlet實(shí)例呢?(怎樣理解Servlet的單實(shí)例多線程?)?。?!

  • 只有一個(gè)servlet實(shí)例;一個(gè)servlet是在第一次被訪問(wèn)時(shí)加載到內(nèi)存并實(shí)例化的
  • 同樣的業(yè)務(wù)請(qǐng)求共享一個(gè)servlet實(shí)例;不同的業(yè)務(wù)請(qǐng)求一般對(duì)應(yīng)不同的servlet
  • 由于Servlet/JSP默認(rèn)是以多線程模式執(zhí)行的,所以,在編寫(xiě)代碼時(shí)需要非常細(xì)致地考慮多線程的安全性問(wèn)題

2)JSP的中存在的多線程問(wèn)題

  • 當(dāng)客戶(hù)端第一次請(qǐng)求某一個(gè)JSP文件時(shí),服務(wù)端把該JSP編譯成一個(gè)CLASS文件,并創(chuàng)建一個(gè)該類(lèi)的實(shí)例,然后創(chuàng)建一個(gè)線程處理CLIENT端的請(qǐng)求
  • 如果有多個(gè)客戶(hù)端同時(shí)請(qǐng)求該JSP文件,則服務(wù)端會(huì)創(chuàng)建多個(gè)線程。每個(gè)客戶(hù)端請(qǐng)求對(duì)應(yīng)一個(gè)線程。以多線程方式執(zhí)行可大大降低對(duì)系統(tǒng)的資源需求,提高系統(tǒng)的并發(fā)量及響應(yīng)時(shí)間

3)對(duì)JSP中可能用的的變量說(shuō)明

  • 實(shí)例變量: 實(shí)例變量是在堆中分配的,并被屬于該實(shí)例的所有線程共享,所以不是線程安全的
  • JSP系統(tǒng)提供的8個(gè)類(lèi)變量:
    • JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是線程安全的(因?yàn)槊總€(gè)線程對(duì)應(yīng)的request,respone對(duì)象都是不一樣的,不存在共享問(wèn)題)
    • APPLICATION在整個(gè)系統(tǒng)內(nèi)被使用,所以不是線程安全的
  • 局部變量: 局部變量在堆棧中分配,因?yàn)槊總€(gè)線程都有它自己的堆??臻g,所以是線程安全的
  • 靜態(tài)類(lèi): 靜態(tài)類(lèi)不用被實(shí)例化,就可直接使用,不是線程安全的
  • 外部資源: 在程序中可能會(huì)有多個(gè)線程或進(jìn)程同時(shí)操作同一個(gè)資源(如:多個(gè)線程或進(jìn)程同時(shí)對(duì)一個(gè)文件進(jìn)行寫(xiě)操作).此時(shí)也要注意同步問(wèn)題

4)Servlet單實(shí)例多線程機(jī)制:

  • Servlet采用多線程來(lái)處理多個(gè)請(qǐng)求同時(shí)訪問(wèn)
  • servlet依賴(lài)于一個(gè)線程池來(lái)服務(wù)請(qǐng)求;線程池實(shí)際上是一系列的工作者線程集合。Servlet使用一個(gè)調(diào)度線程來(lái)管理工作者線程
  • 當(dāng)容器收到一個(gè)Servlet請(qǐng)求,調(diào)度線程從線程池中選出一個(gè)工作者線程,將請(qǐng)求傳遞給該工作者線程,然后由該線程來(lái)執(zhí)行Servlet的service方法。
  • 當(dāng)這個(gè)線程正在執(zhí)行的時(shí)候,容器收到另外一個(gè)請(qǐng)求,調(diào)度線程同樣從線程池中選出另一個(gè)工作者線程來(lái)服務(wù)新的請(qǐng)求,容器并不關(guān)心這個(gè)請(qǐng)求是否訪問(wèn)的是同一個(gè)Servlet
  • 當(dāng)容器同時(shí)收到對(duì)同一個(gè)Servlet的多個(gè)請(qǐng)求的時(shí)候,那么這個(gè)Servlet的service()方法將在多線程中并發(fā)執(zhí)行
  • Servlet容器默認(rèn)采用單實(shí)例多線程的方式來(lái)處理請(qǐng)求,這樣減少產(chǎn)生Servlet實(shí)例的開(kāi)銷(xiāo),提升了對(duì)請(qǐng)求的響應(yīng)時(shí)間,對(duì)于Tomcat可以在server.xml中通過(guò)元素設(shè)置線程池中線程的數(shù)目

5)如何開(kāi)發(fā)線程安全的Servlet

  • 實(shí)現(xiàn) SingleThreadModel 接口
    • 該接口指定了系統(tǒng)如何處理對(duì)同一個(gè)Servlet的調(diào)用
    • 如果一個(gè)Servlet被這個(gè)接口指定,那么在這個(gè)Servlet中的service方法將不會(huì)有兩個(gè)線程被同時(shí)執(zhí)行,當(dāng)然也就不存在線程安全的問(wèn)題。這種方法只要將前面的Concurrent Test類(lèi)的類(lèi)頭定義更改為:
Public class Concurrent Test extends HttpServlet implements SingleThreadModel { 
………… 
}

6)同步對(duì)共享數(shù)據(jù)的操作

  • 使用synchronized 關(guān)鍵字能保證一次只有一個(gè)線程可以訪問(wèn)被保護(hù)的區(qū)段
  • 避免使用實(shí)例變量
    • 本實(shí)例中的線程安全問(wèn)題是由實(shí)例變量造成的,只要在Servlet里面的任何方法里面都不使用實(shí)例變量,那么該Servlet就是線程安全的

7)Struts1 Action和Struts2的Action辨析

  • Struts2的Action是原型,非單實(shí)例的;會(huì)對(duì)每一個(gè)請(qǐng)求,產(chǎn)生一個(gè)Action的實(shí)例來(lái)處理
    • Struts2 Action對(duì)象為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒(méi)有線程安全問(wèn)題(實(shí)際上,servlet容器給每個(gè)請(qǐng)求產(chǎn)生許多可丟棄的對(duì)象,并且不會(huì)導(dǎo)致性能和垃圾回收問(wèn)題)
  • Struts1 Action是單實(shí)例的,mvc的controller也單實(shí)例的
    • 因此Struts1 Action和mvc的controller開(kāi)發(fā)時(shí)要求必須是線程安全的,因?yàn)閮H有Action的一個(gè)實(shí)例來(lái)處理所有的請(qǐng)求;單例策略限制了Struts1 Action能作的事,并且要在開(kāi)發(fā)時(shí)特別小心
    • Struts1 Action資源必須是線程安全的或同步的
  • Struts1的Action,Spring的Ioc容器管理的bean默認(rèn)是單實(shí)例的
  • 當(dāng)Spring管理Struts2的Action時(shí),bean默認(rèn)是單實(shí)例的,可以通過(guò)配置參數(shù)將其設(shè)置為原型(scope="prototype )

四、JDBC數(shù)據(jù)庫(kù)連接池

1. 為什么要使用連接池:

在使用開(kāi)發(fā)基于數(shù)據(jù)庫(kù)的web程序時(shí),傳統(tǒng)的模式基本是按以下步驟:

  • 在主程序(如servlet、beans)中建立數(shù)據(jù)庫(kù)連接
  • 進(jìn)行sql操作?
  • 斷開(kāi)數(shù)據(jù)庫(kù)連接

這種模式存在的問(wèn)題:

  • 普通的JDBC數(shù)據(jù)庫(kù)連接使用 DriverManager 來(lái)獲取,每次向數(shù)據(jù)庫(kù)建立連接的時(shí)候都要將 Connection 加載到內(nèi)存中,再驗(yàn)證用戶(hù)名和密碼(得花費(fèi)0.05s~1s的時(shí)間);需要數(shù)據(jù)庫(kù)連接的時(shí)候,就向數(shù)據(jù)庫(kù)要求一個(gè),執(zhí)行完成后再斷開(kāi)連接。這樣的方式將會(huì)消耗大量的資源和時(shí)間。數(shù)據(jù)庫(kù)的連接資源并沒(méi)有得到很好的重復(fù)利用.若同時(shí)有幾百人甚至幾千人在線,頻繁的進(jìn)行數(shù)據(jù)庫(kù)連接操作將占用很多的系統(tǒng)資源,嚴(yán)重的甚至?xí)斐煞?wù)器的崩潰
  • 對(duì)于每一次數(shù)據(jù)庫(kù)連接,使用完后都得斷開(kāi)。否則,如果程序出現(xiàn)異常而未能關(guān)閉,將會(huì)導(dǎo)致數(shù)據(jù)庫(kù)系統(tǒng)中的內(nèi)存泄漏,最終將導(dǎo)致重啟數(shù)據(jù)庫(kù)
  • 這種開(kāi)發(fā)不能控制被創(chuàng)建的連接對(duì)象數(shù),系統(tǒng)資源會(huì)被毫無(wú)顧及的分配出去,如連接過(guò)多,也可能導(dǎo)致內(nèi)存泄漏,服務(wù)器崩潰

連接池本質(zhì)上是構(gòu)建一個(gè)容器,容器來(lái)存儲(chǔ)創(chuàng)建好的線程、http連接、數(shù)據(jù)庫(kù)連接、netty連接等

2. 連接池技術(shù)核心:

  • 連接或者說(shuō)創(chuàng)建的資源復(fù)用

3.使用連接池的好處:

  • 連接復(fù)用:通過(guò)建立一個(gè)數(shù)據(jù)庫(kù)連接池以及一套連接使用管理策略,使得一個(gè)數(shù)據(jù)庫(kù)連接可以得到高效、安全的復(fù)用,避免了數(shù)據(jù)庫(kù)連接頻繁建立、關(guān)閉的開(kāi)銷(xiāo)
  • 對(duì)于共享資源,有一個(gè)很著名的設(shè)計(jì)模式:資源池。該模式正是為了解決資源頻繁分配、釋放所造成的問(wèn)題的。把該模式應(yīng)用到數(shù)據(jù)庫(kù)連接管理領(lǐng)域,就是建立一個(gè)數(shù)據(jù)庫(kù)連接池,提供一套高效的連接分配、使用策略,最終目標(biāo)是實(shí)現(xiàn)連接的高效、安全的復(fù)用
  • 連接池還有一個(gè)副作用就是實(shí)現(xiàn)了高可用,在微服務(wù)場(chǎng)景下一個(gè)連接不可用,那么再?gòu)膎etty連接池中取出一個(gè)進(jìn)行使用,避免了連接不可用問(wèn)題

各個(gè)連接池構(gòu)建、使用管理詳細(xì)過(guò)程大概分成以下三部分:

  • 首先初始化連接池,根據(jù)設(shè)置相應(yīng)參數(shù),連接池大小、核心線程數(shù)、核心連接數(shù)等參數(shù),初始化創(chuàng)建數(shù)據(jù)庫(kù)、http、netty連接以及jdk線程
  • 連接池使用,前邊初始化好的連接池、線程池,直接從連接池、線程中取出資源即可進(jìn)行使用,使用完后要記得交還連接池、線程池,通過(guò)池容器來(lái)對(duì)資源進(jìn)行管理
  • 對(duì)于連接池維護(hù),連接池、線程池來(lái)維護(hù)連接、線程狀態(tài),不可用連接、線程進(jìn)行銷(xiāo)毀,正在使用連接、線程進(jìn)行狀態(tài)標(biāo)注,連接、線程不夠后并且少于設(shè)置大連接、線程數(shù),要進(jìn)行新連接、線程創(chuàng)建

4.連接池的實(shí)現(xiàn)

  • 數(shù)據(jù)庫(kù)連接池的基本原理是在內(nèi)部對(duì)象池中維護(hù)一定數(shù)量的數(shù)據(jù)庫(kù)連接,并對(duì)外暴露數(shù)據(jù)庫(kù)連接獲取方法和返回方法。
  • 外部使用者可通過(guò) getConnection 方法獲取連接,使用完畢后再通過(guò) close 方法將連接返回,此時(shí)連接并沒(méi)有關(guān)閉,而是由連接池管理器回收,并為下一次使用做好準(zhǔn)備
  • Java 中有一個(gè) DataSource 接口, 數(shù)據(jù)庫(kù)連接池就是 DataSource 的一個(gè)實(shí)現(xiàn)

5.數(shù)據(jù)庫(kù)連接池

1)定義及理解:

  • 數(shù)據(jù)庫(kù)連接池的基本思想就是為數(shù)據(jù)庫(kù)連接建立一個(gè)“緩沖池”;預(yù)先在緩沖池中放入一定數(shù)量的連接,當(dāng)需要建立數(shù)據(jù)庫(kù)連接時(shí),只需從“緩沖池”中取出一個(gè),使用完畢之后再放回去
  • 數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè)
  • 數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中
    • 數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的。無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。
    • 連接池的大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過(guò)大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中

2)數(shù)據(jù)庫(kù)連接池技術(shù)的優(yōu)點(diǎn)

  • 資源重用(復(fù)用):由于數(shù)據(jù)庫(kù)連接得以重用,避免了頻繁創(chuàng)建,釋放連接引起的大量性能開(kāi)銷(xiāo);在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增加了系統(tǒng)運(yùn)行環(huán)境的平穩(wěn)性
  • 更快的系統(tǒng)反應(yīng)速度:數(shù)據(jù)庫(kù)連接池在初始化過(guò)程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫(kù)連接置于連接池中備用。此時(shí)連接的初始化工作均已完成。對(duì)于業(yè)務(wù)請(qǐng)求處理而言,直接利用現(xiàn)有可用連接,避免了數(shù)據(jù)庫(kù)連接初始化和釋放過(guò)程的時(shí)間開(kāi)銷(xiāo),從而減少了系統(tǒng)的響應(yīng)時(shí)間
  • 新的資源分配手段:對(duì)于多應(yīng)用共享同一數(shù)據(jù)庫(kù)的系統(tǒng)而言,可在應(yīng)用層通過(guò)數(shù)據(jù)庫(kù)連接池的配置,實(shí)現(xiàn)某一應(yīng)用大可用數(shù)據(jù)庫(kù)連接數(shù)的限制,避免某一應(yīng)用獨(dú)占所有的數(shù)據(jù)庫(kù)資源
  • 統(tǒng)一的連接管理,避免數(shù)據(jù)庫(kù)連接泄露:在較為完善的數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)中,可根據(jù)預(yù)先的占用超時(shí)設(shè)定,強(qiáng)制回收被占用連接,從而避免了常規(guī)數(shù)據(jù)庫(kù)連接操作中可能出現(xiàn)的資源泄露

3)兩種開(kāi)源的數(shù)據(jù)庫(kù)連接池:

  • JDBC 的數(shù)據(jù)庫(kù)連接池使用 javax.sql.DataSource 來(lái)表示,DataSource 只是一個(gè)接口,該接口通常由服務(wù)器(Weblogic, WebSphere, Tomcat)提供實(shí)現(xiàn),也有一些開(kāi)源組織提供實(shí)現(xiàn):
    • DBCP 數(shù)據(jù)庫(kù)連接池
    • C3P0 數(shù)據(jù)庫(kù)連接池
  • DataSource 通常被稱(chēng)為數(shù)據(jù)源,也可稱(chēng)為連接池,它包含連接池和連接池管理兩個(gè)部分
  • 數(shù)據(jù)源和數(shù)據(jù)庫(kù)連接不同,數(shù)據(jù)源無(wú)需創(chuàng)建多個(gè),它是產(chǎn)生數(shù)據(jù)庫(kù)連接的工廠,因此整個(gè)應(yīng)用只需要一個(gè)數(shù)據(jù)源即可
  • 當(dāng)數(shù)據(jù)庫(kù)訪問(wèn)結(jié)束后,程序還是像以前一樣關(guān)閉數(shù)據(jù)庫(kù)連接:conn.close(); 但上面的代碼并沒(méi)有關(guān)閉數(shù)據(jù)庫(kù)的物理連接,它僅僅把數(shù)據(jù)庫(kù)連接釋放,歸還給了數(shù)據(jù)庫(kù)連接池

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

名稱(chēng)欄目:JavaWeb——基礎(chǔ)知識(shí)-創(chuàng)新互聯(lián)
分享鏈接:http://www.sd-ha.com/article10/dgogdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站改版、網(wǎng)站排名品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司