Servlet和CGI的區別
Servlet被伺服器例項化後,容器執行其init方法,請求到達時執行其service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將例項銷燬的時候呼叫其destroy方法。
servlet處於伺服器程式中,它通過多執行緒方式執行其service方法,一個例項可以服務於多個請求,並且其例項一般不會銷燬,而CGI對每個請求都產生新的程式,服務完成後就銷燬,所以效率上低於servlet。
概括來講,Servlet可以完成和CGI相同的功能。
CGI應用開發比較困難,因為它要求程式設計師有處理引數傳遞的知識,這不是一種通用的技能。CGI不可移植,為某一特定平臺編寫的CGI應用只能執行於這一環境中。每一個CGI應用存在於一個由客戶端請求啟用的程式中,並且在請求被服務後被解除安裝。這種模式將引起很高的記憶體、CPU開銷,而且在同一程式中不能服務多個客戶。
Servlet提供了Java應用程式的所有優勢——可移植、穩健、易開發。使用Servlet Tag技術,Servlet能夠生成嵌於靜態HTML頁面中的動態內容。
Servlet對CGI的最主要優勢在於一個Servlet被客戶端傳送的第一個請求啟用,然後它將繼續執行於後臺,等待以後的請求。每個請求將生成一個新的執行緒,而不是一個完整的程式。多個客戶能夠在同一個程式中同時得到服務。一般來說,Servlet程式只是在Web Server解除安裝時被解除安裝。
Servlet在效能、編寫難度、可移植性等方面比CGI有明顯優勢。在WebSphere Application Server中提供了功能強大的Servlet API,它們比JSDK擁有更多的功能和更優的效能,為Servlet的程式設計提供了很好的支援。隨著WAS的日益推廣和Java技術的普及,可以預見,Servlet技術將取代CGI,成為對Web Server功能擴充的標準技術。
最早支援Servlet技術的是JavaSoft的Java Web Server。此後,一些其它的基於Java的Web Server開始支援標準的Servlet API。Servlet的主要功能在於互動式地瀏覽和修改資料,生成動態Web內容。這個過程為:
·客戶端傳送請求至伺服器端;
·伺服器將請求資訊傳送至Servlet;
·Servlet生成響應內容並將其傳給Server。響應內容動態生成,通常取決於客戶端的請求;
·伺服器將響應返回給客戶端。
Servlet看起來像是通常的Java程式。Servlet匯入特定的屬於Java Servlet API的包。因為是物件位元組碼,可動態地從網路載入,可以說Servlet對Server就如同Applet對Client一樣,但是,由於Servlet執行於Server中,它們並不需要一個圖形使用者介面。從這個角度講,Servlet也被稱為Faceless Object。
Servlet的優勢
Java Servlet提供了許多優勢:
·Servlet可以和其他資源(檔案、資料庫、Applet、Java應用程式等)互動,以生成返回給客戶端的響應內容。如果需要,還可以儲存請求-響應過程中的資訊。
·採用Servlet,伺服器可以完全授權對本地資源的訪問(如資料庫),並且Servlet自身將會控制外部使用者的訪問數量及訪問性質。
·Servlet可以是其它服務的客戶端程式,例如,它們可以用於分散式的應用系統中。
·可以從本地硬碟,或者通過網路從遠端硬碟啟用Servlet。
·Servlet可被連結(chain)。一個Servlet可以呼叫另一個或一系列Servlet,即成為它的客戶端。
·採用Servlet Tag技術,可以在HTML頁面中動態呼叫Servlet。
·Servlet API與協議無關。它並不對傳遞它的協議有任何假設。
·像所有的Java程式一樣,Servlet擁有物件導向Java語言的所有優勢。
Servlet與CGI-BIN
概括來講,Servlet可以完成和CGI相同的功能。
CGI應用開發比較困難,因為它要求程式設計師有處理引數傳遞的知識,這不是一種通用的技能。CGI不可移植,為某一特定平臺編寫的CGI應用只能執行於這 一環境中。每一個CGI應用存在於一個由客戶端請求啟用的程式中,並且在請求被服務後被解除安裝。這種模式將引起很高的記憶體、CPU開銷,而且在同一程式中不 能服務多個客戶。
Servlet提供了Java應用程式的所有優勢——可移植、穩健、易開發。使用Servlet Tag技術,Servlet能夠生成嵌於靜態HTML頁面中的動態內容。
Servlet對CGI的最主要優勢在於一個Servlet被客戶端傳送的第一個請求啟用,然後它將繼續執行於後臺,等待以後的請求。每個請求將生成一
個新的執行緒,而不是一個完整的程式。多個客戶能夠在同一個程式中同時得到服務。一般來說,Servlet程式只是在Web Server解除安裝時被解除安裝。
Servlet的生命週期(見圖2)可以被歸納為以下幾點:
·裝載Servlet。這項操作一般是動態執行的。然而,Server通常會提供一個管理的選項,用於在Server啟動時強制裝載和初始化特定的Servlet(1);
·Server建立一個Servlet的例項(2);
·Server呼叫Servlet的init()方法(3);
·一個客戶端的請求到達Server(1);
·Server建立一個請求物件(4);
·Server建立一個響應物件(5);
·Server啟用Servlet的service()方法(6),傳遞請求(7)和響應(8)物件作為引數;
·service()方法獲得關於請求物件的資訊,處理請求,訪問其他資源(9),獲得需要的資訊(10);
·service()方法使用響應物件的方法,將響應傳回Server(11)、(12),最終到達客戶端(13)。service()方法可能啟用其它方法以處理請求,如doGet()或doPost()或程式設計師自己開發的新的方法;
·對於更多的客戶端請求,Server建立新的請求和響應物件,仍然啟用此Servlet的service()方法,將這兩個物件作為引數傳遞給它。如此重複以上的迴圈,但無需再次呼叫init()方法。一般Servlet只初始化一次;
·當Server不再需要Servlet時(一般當Server關閉時),Server呼叫Servlet的Destroy()方法。
Servlet與CGI程式的比較
CGI(Common Gateway Interface)程式,主要用Perl、Shell Script或C編寫,能夠向客戶端提供動態內容,即每次客戶端瀏覽器訪問某一頁面時,可以看到不同的內容。這裡對完成相同功能的CGI程式和Java
Servlet程式作一比較,以便更清楚地看到Servlet的簡單特性。
相關文章
- CGI與Servlet的區別和聯絡Servlet
- cgi和fast-cgi以及php-fpm的聯絡和區別ASTPHP
- CGI,FastCGI,PHP-CGI與PHP-FPM的區別ASTPHP
- MIDP與CGI和Servlet間通訊(轉)Servlet
- Filter 與 Servlet 的區別FilterServlet
- Jsp和Servlet有什麼區別?JSServlet
- CGI,FastCGI,PHP-CGI與PHP-FPM區別詳解ASTPHP
- CGI、FastCGI、PHP-CGI和PHP-FPM 概念區分ASTPHP
- JavaWeb開發Servlet之getParameter和getAttribute的區別,JavaWebServlet
- 簡單瞭解下CGI、FastCGI和php-fpm的概念和區別和執行原理ASTPHP
- Spring | xx-servlet.xml 和 applicationContext.xml 的區別SpringServletXMLAPPContext
- PHP知識筆記:CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI區別PHP筆記AST
- JAVA基礎:JSP與Servlet的區別(轉)JavaJSServlet
- CGI和FastCGIAST
- servlet/filter/listener/interceptor區別與聯絡ServletFilter
- SpringMVC框架和Servlet開發有啥子區別(SpringMVC優勢)SpringMVC框架Servlet
- web應用servlet中Attribute、Parameter、InitParameter的區別WebServlet
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別