天天看點

Servlet的生命周期,Servlet和CGI的差別

Servlet的生命周期分為5個階段:

執行個體化:Servlet容器建立Servlet類的執行個體。

初始化:該容器調用init()方法,通常會申請資源。

服務:由容器調用service()方法,(也就是doGet()和doPost())。

破壞:在釋放Servlet執行個體之前調用destroy()方法,通常會釋放資源。

不可用:釋放記憶體的執行個體。

概括來講,Servlet可以完成和CGI相同的功能。

CGI(Common Gateway Interface通用網關接口)程式來實作資料在Web上的傳輸,使用的是如Perl這樣的語言編寫的,它對于用戶端作出的每個請求,必須建立CGI程式的一個新執行個體,這樣占用大量的記憶體資源。由此才引入了Servlet技術。

Servlet是一個用java編寫的應用程式,在伺服器上運作,處理請求資訊并将其發送到用戶端。對于用戶端的請求,隻需要建立Servlet的執行個體一次,是以節省了大量的記憶體資源。Servlet在初始化後就保留在記憶體中,是以每次作出請求時無需加載。

  CGI應用開發比較困難,因為它要求程式員有處理參數傳遞的知識,這不是一種通用的技能。CGI不可移植,為某一特定平台編寫的CGI應用隻能運作于這一環境中。每一個CGI應用存在于一個由用戶端請求激活的程序中,并且在請求被服務後被解除安裝。這種模式将引起很高的記憶體、CPU開銷,而且在同一程序中不能服務多個客戶。

  Servlet提供了Java應用程式的所有優勢——可移植、穩健、易開發。使用Servlet Tag技術,Servlet能夠生成嵌于靜态HTML頁面中的動态内容。

  Servlet對CGI的最主要優勢在于一個Servlet被用戶端發送的第一個請求激活,然後它将繼續運作于背景,等待以後的請求。每個請求将生成一個新的線程,而不是一個完整的程序。多個客戶能夠在同一個程序中同時得到服務。一般來說,Servlet程序隻是在Web Server解除安裝時被解除安裝。