CGI與Servlet的區別和聯絡

BruceZhang發表於2015-11-19
  1. 定義:

CGI(Common Gateway Interface 公共閘道器介面)是HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須執行在網路伺服器上。

  1. 功能:

絕大多數的CGI程式被用來解釋處理傑自表單的輸入資訊,並在服 務器產生相應的處理,或將相應的資訊反饋給瀏覽器。CGI程式使 網頁具有互動功能。

  1. 執行環境:

CGI程式在UNIX作業系統上CERN或NCSA格式的伺服器上執行。 在其它作業系統(如:windows NT及windows95等)的伺服器上 也廣泛地使用CGI程式,同時它也適用於各種型別機器。

  1. CGI處理步驟:

      ⑴通過Internet把使用者請求送到伺服器。

      ⑵伺服器接收使用者請求並交給CGI程式處理。

      ⑶CGI程式把處理結果傳送給伺服器。

      ⑷伺服器把結果送回到使用者。

Servlet是一種伺服器端的Java應用程式,具有獨立於平臺和協議的特性,可以生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程式)與伺服器響應(HTTP伺服器上的資料庫或應用程式)的中間層。 Servlet是位於Web 伺服器內部的伺服器端的Java應用程式,與傳統的從命令列啟動的Java應用程式不同,Servlet由Web伺服器進行載入,該Web伺服器必須包含支援Servlet的Java虛擬機器。

工作模式:客戶端傳送請求至伺服器;伺服器啟動並呼叫Servlet,Servlet根據客戶端請求生成響應內容並將其傳給伺服器;伺服器將響應返回客戶端。

Java Servlet與CGI (Common Gateway Interface 公共閘道器介面)的比較:

  與傳統的CGI和許多其他類似CGI的技術相比,Java Servlet具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資。在未來的技術發展過程中,Servlet有可能徹底取代CGI。

  在傳統的CGI中,每個請求都要啟動一個新的程式,如果CGI程式本身的執行時間較短,啟動程式所需要的開銷很可能反而超過實際執行時間。而在Servlet中,每個請求由一個輕量級的Java執行緒處理(而不是重量級的作業系統程式)。

  在傳統CGI中,如果有N個併發的對同一CGI程式的請求,則該CGI程式的程式碼在記憶體中重複裝載了N次;而對於Servlet,處理請求的是N個執行緒,只需要一份Servlet類程式碼。在效能優化方面,Servlet也比CGI有著更多的選擇。

  * 方便  

  Servlet提供了大量的實用工具例程,例如自動地解析和解碼HTML表單資料、讀取和設定HTTP頭、處理Cookie、跟蹤會話狀態等。

  * 功能強大

  在Servlet中,許多使用傳統CGI程式很難完成的任務都可以輕鬆地完成。例如,Servlet能夠直接和Web伺服器互動,而普通的CGI程式不能。Servlet還能夠在各個程式之間共享資料,使得資料庫連線池之類的功能很容易實現。

  * 可移植性好

Servlet用Java編寫,Servlet API具有完善的標準。因此,為IPlanet Enterprise Server寫的Servlet無需任何實質上的改動即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流伺服器都直接或通過外掛支援Servlet。

相關文章