Servlet 與 CGI的區別

CGI:Common Gateway Interface,通用網關接口。 php

Servlet的生命週期及與CGI的區別:

  • Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。
  • 與cgi的區別在於servlet處於服務器進程中,它經過多線程方式運行其service方法,一個實例能夠服務於多個請求

CGI處理步驟:

首先,客戶端(即Web瀏覽器)根據某資源的URL向Web服務器提出請求;Web服務器的守護進程(HTTP Daemon)將此請求的參數經過標準輸入和環境變量傳遞給指定的CGI程序,並啓動此應用程序進行處理,如要存取數據庫服務器上數據庫的數據,則向數據庫服務器發出處理請求,數據庫服務器將執行結果返回給CGI程序,CGI程序把處理結果經過標準輸出返回給HTTP Daemon進程再由HTTP Daemon進程返回給客戶端,由瀏覽器解釋執行,將最終結果在用戶面前顯示。 數據庫

Servlet與CGI的比較:

      和CGI程序同樣,Servlet能夠響應用戶的指令(提交一個FORM等等),也能夠象CGI程序同樣,收集用戶表單的信息並給予動態反饋(簡單的註冊信息錄入和檢查錯誤)。
  然而,Servlet的機制並不單單是這樣簡單的與用戶表單進行交互。傳統技術中,動態的網頁創建和顯示都是經過CGI來實現的,可是,有了Servlet,您能夠大膽的放棄全部CGI(perl?php?甚至asp!),利用Servlet代替CGI,進行程序編寫。
  對比一:當用戶瀏覽器發出一個Http/CGI的請求,或者說調用一個CGI程序的時候,服務器端就要新啓用一個進程(並且是每次都要調用),調用CGI程序越多(特別是訪問量高的時候),就要消耗系統越多的處理時間,只剩下愈來愈少的系統資源,對於用戶來講,只能是漫長的等待服務器端的返回頁面了,這對於電子商務激烈發展的今天來講,不能不說是一種技術上的遺憾。
  而Servlet充分發揮了服務器端的資源並高效的利用。每次調用Servlet時並非新啓用一個進程,而是在一個Web服務器的進程中共享和分離線程,而線程最大的好處在於能夠共享一個數據源,使系統資源被有效利用。 瀏覽器

      對比二:傳統的CGI程序,不具有平臺無關性特徵,系統環境發生變化,CGI程序就要癱瘓,而Servlet具有Java的平臺無關性,在系統開發過程當中保持了系統的可擴展性、高效性。 緩存

      對比三:傳統技術中,通常大都爲二層的系統架構,即Web服務器+數據庫服務器,致使網站訪問量大的時候,沒法克服CGI程序與數據庫創建鏈接時速度慢的瓶頸,從而死機、數據庫死鎖現象頻繁發生。而咱們的Servlet有鏈接池的概念,它能夠利用多線程的優勢,在系統緩存中事先創建好若干與數據庫的鏈接,到時候若想和數據庫打交道能夠隨時跟系統"要"一個鏈接便可,反應速度可想而知。 服務器

相關文章
相關標籤/搜索