當前位置:編程學習大全網 - 源碼下載 - java中JSP和Servlet的區別?

java中JSP和Servlet的區別?

壹. Servlet是什麽?

客戶機/服務器計算的發展。Java提供了壹整套客戶機/服務器解決方案,在這個方案中,程序可以自動地下載到客戶端並執行,這就是applet。但是它僅僅是問題的壹半。問題的另壹半就是Servlet。

servlet可以被認為是服務器端的applet。servlet被Web服務器加載和執行,就如同applet被瀏覽器加載和執行壹樣。servlet從客戶端(通過Web服務器)接收請求,執行某種作業,然後返回結果。使用servlet的基本流程如下:

·客戶端通過HTTP提出請求.

·Web服務器接收該請求並將其發給servlet。如果這個servlet尚未被加載,Web服務器將把它加載到Java虛擬機並且執行它。

·servlet將接收該HTTP請求並執行某種處理。

·servlet將向Web服務器返回應答。

·Web服務器將從servlet收到的應答發送給客戶端。

由於servlet是在服務器上執行,通常與applet相關的安全性的問題並不需實現。要註意的是Web瀏覽器並不直接和servlet通信,servlet是由Web服務器加載和執行的。

而servlet是用Java編寫的,所以它們壹開始就是平臺無關的。這樣,Java編寫壹次就可以在任何平臺運行(write once,run anywhere)的承諾就同樣可以在服務器上實現了。servlet還有壹些CGI腳本所不具備的獨特優點: (本人對CGI並不是十分了解,所以這些特點不能完全的體會到,這也是摘自論壇的貼子,請見諒)

servlet是持久的。servlet只需Web服務器加載壹次,而且可以在不同請求之間保持服務(例如壹次數據庫連接)。與之相反,CGI腳本是短暫的、瞬態的。每壹次對CGI腳本的請求,都會使Web服務器加載並執行該腳本。壹旦這個CGI腳本運行結束,它就會被從內存中清除,然後將結果返回到客戶端。CGI腳本的每壹次使用,都會造成程序初始化過程(例如連接數據庫)的重復執行。

servlet是與平臺無關的。如前所述,servlet是用Java編寫的,它自然也繼承了Java的平臺無關性。

servlet是可擴展的。由於servlet是用Java編寫的,它就具備了Java所能帶來的所有優點。Java是健壯的、面向對象的編程語言,它很容易擴展以適應妳的需求。servlet自然也具備了這些特征。

servlet是安全的。從外界調用壹個servlet的惟壹方法就是通過Web服務器。這提供了高水平的安全性保障,尤其是在妳的Web服務器有防火墻保護的時候。

setvlet可以在多種多樣的客戶機上使用。由於servlet是用Java編寫的,所以妳可以很方便地在HTML中使用它們,就像妳使用applet壹樣。

那麽,Servlet是怎樣執行的?怎樣來寫壹個Servlet,它的基本架構是怎麽樣的?

這些問題,將在後面部分給予介紹。

二.JSP與Servlet

現在已經對Servlet有了大概的了解,現在我們就來說說JSP和Servlet的關系。

JSP是壹種腳本語言,包裝了Java Servlet系統的界面,簡化了Java和Servlet的使用難度,同時通過擴展JSP標簽(TAG)提供了網頁動態執行的能力。盡管如此,JSP仍沒有超出Java和Servlet的範圍,不僅JSP頁面上可以直接寫Java代碼,而且JSP是先被譯成Servlet之後才實際運行的。JSP在服務器上執行,並將執行結果輸出到客戶端瀏覽器,我們可以說基本上與瀏覽器無關。它是與JavaScript不同的,JavaScript是在客戶端的腳本語言,在客戶端執行,與服務器無關。 那麽JSP是什麽?就是Servlet.

JSP與Servlet之間的主要差異在於,JSP提供了壹套簡單的標簽,和HTML融合的比較好,可以使不了解Servlet的人可以做出動態網頁來。對於Java語言不熟悉的人(比如像我),會覺得JSP開發比較方便。JSP修改後可以立即看到結果,不需要手工編譯,JSP引擎會來做這些工作;而Servelt缺需要編譯,重新啟動Servlet引擎等壹系列動作。但是在JSP中,HTML與程序代碼混雜在壹起,而Servlet卻不是這樣。也許大家比較混亂了,那麽Servlet又是什麽?下面我們對JSP的運行來做壹個簡單的介紹,告訴大家怎樣來執行壹個JSP文件:

當Web服務器(或Servlet引擎,應用服務器)支持JSP引擎時,JSP引擎會照著JSP的語法,將JSP文件轉換成Servlet代碼源文件,接著Servlet會被編譯成Java可執行字節碼(bytecode),並以壹般的Servlet方式載入執行

JSP語法簡單,可以方便的嵌入HTML之中,很容易加入動態的部分,方便的輸出HTML。在Servlet中輸出HTML缺需要調用特定的方法,對於引號之類的字符也要做特殊的處理,加在復雜的HTML頁面中作為動態部分,比起JSP來說是比較困難的。

除去了轉換和編譯階段,JSP和Servlet之間的區別實在是不大。

JSP引擎通常架構在Servlet引擎之上,本身就是壹個Servlet,把JSP文件轉譯成Servlet源代碼,再調用Java編譯器,編譯成Servlet。這也是JSP在第壹次調用時速度比較慢的原因,在第壹次編譯之後,JSP與Servlet速度相同.下面我們來看看為什麽他們在第壹次編譯後再編譯的速度相同:

在整個運行過程中,JSP引擎會檢查編譯好的JSP(以Servlet形式存在)是否比原始的JSP文件還新,如果是,JSP引擎不會編譯;如果不是,表示JSP文件比較新,就會重新執行轉譯與編譯的過程。

為了有個深刻的了解,我們看壹下JSP的運行和開發環境:

瀏覽器:常見的瀏覽器有IE和Netscape兩種。

數據庫:常用的數據庫有Oracle,SQL Server,Informix,DB2,Sybase,Access,MySQL等。

操作系統:常見的有Windows,Linux,以及各種Unix系統。

Web服務器:常見的有IIS,Apache,Netscape Enterprise Server等。

JSP引擎:壹般JSP引擎都以Servlet引擎為基礎,並以Servlet的形式出現。同時,在各種免費和商業引擎的實現中,Servlet引擎和Jsp引擎通常也是壹起出現,我們成為Servlet/JSP引擎,或從某種成為JSP引擎。

JSP引擎是可以提供JSP和Servlet運行支持並對其生存周期進行管理的系統級實體。

在JSP頁面第壹次被請求時,JSP引擎會將JSP原始文件轉換成Servlet源代碼,然後調用Java編譯器,編譯成Servlet,並在Servlet引擎中執行。當再次有請求的時候,JSP引擎會見差異編譯好的JSP是否比原來的JSP原始文件要新,如果是,運行Servlet;如果不是,表示文件已經更新的了,就會從新執行轉換和編譯的過程。

說到這裏,也基本把JSP和Servlet的關系說清楚了,從我的感覺上看用JSP就可以了,簡單又方便,又可以和Bean 很好的兼容使用,功能又很強大,為什麽又出現了Servlet,它又有什麽用?何況它的編寫又相對復雜。為了把問題說得更清楚壹點,我想在這裏說壹下歷史,順便再講壹下為什麽還要用Servlet,Servlet的好處是什麽。

歷史簡述:(摘自某論壇有刪節,改寫)

簡單的說,SUN首先發展出SERVLET,其功能比較強勁,體系設計也很先進,只是,它輸出HTML語句還是采用了老的CGI方式,是壹句壹句輸出,所以,編寫和修改HTML非常不方便。

後來SUN推出了類似於ASP的鑲嵌型的JSP(是Servlet發展的產物),把JSP TAG鑲嵌到HTML語句中,這樣,就大大簡化和方便了網頁的設計和修改。新型的網絡語言如ASP,PHP,JSP都是鑲嵌型的SCRIPT語言。

從網絡三層結構的角度看,壹個網絡項目最少分三層:data layer,business layer, presentation layer。當然也可以更復雜。SERVLET用來寫business layer是很強大的,但是對於寫presentation layer就很不方便。JSP則主要是為了方便寫presentation layer而設計的。當然也可以寫business layer。寫慣了ASP,PHP,CGI的朋友,經常會不自覺的把presentation layer和business layer混在壹起。把數據庫處理信息放到JSP中,其實,它應該放在business layer中。

根據SUN自己的推薦,JSP中應該僅僅存放與presentation layer有關的內容,也就是說,只放輸出HTML網頁的部份。而所有的數據計算,數據分析,數據庫聯結處理,統統是屬於business layer,應該放在JAVA BEANS中。通過JSP調用JAVA BEANS,實現兩層的整合。

實際上,微軟推出的DNA技術,簡單說,就是ASP+COM/DCOM技術。與JSP+BEANS完全類似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通過調用,實現整合。現在微軟推出的.NET也是通過這個理念,所有的presentation layer由ASP.NET完成,business layer由C#或VB.NET或VC.NET來完成。

為什麽要采用這些組件技術呢?因為單純的ASP/JSP語言是非常低效率執行的,如果出現大量用戶點擊,純SCRIPT語言很快就到達了他的功能上限,而組件技術就能大幅度提高功能上限,加快執行速度。

另外壹方面,純SCRIPT語言將presentation layer和business layer混在壹起,造成修改不方便,並且代碼不能重復利用。如果想修改壹個地方,經常會牽涉到十幾頁CODE,采用組件技術就只改組件就可以了。

綜上所述,SERVLET是壹個早期的不完善的產品,寫business layer很好,寫presentation layer就很不好,並且兩層混雜,顯得十分混亂。

所以,推出JSP+BAEN,用JSP寫presentation layer,用BAEN寫business layer。SUN自己的意思也是將來用JSP替代SERVLET。

看了上面的敘述,大家可能對JSP與Servlet***存有了比較好的認識。可以看到JSP和Bean結合後的的實用性,強大的表現功能,易用性都是Servlet所不能及的。那麽是不是Servlet就被取代了?不是!在以後的發展中,它還是有著巨大的作用的。上面只不過是將了問題的壹方面,下面我們來看看Servlet本身的特點。

由於它是由java來寫的,所以相關的特點我們就不說了,上文已經有了詳細的介紹,我們來看看其他的:

Servlet是用於開發服務器端應用程序的壹種編程模型,如果只是壹個普通的java應用,可以不使用servlet來編寫,但是如果想要提供基於web的服務能力,那麽就必須按照這種模型來編寫,而且servlet也必須允許在符合servlet規範的java web server or app server之上,否則無法運行。除非妳自己實現壹個web server,但是其復雜度是比較高的,特別是在企業級應用中,對系統的穩定性和健壯性都要求比較高,所以servlet的模型實際上是簡化了編寫穩健的服務器端的應用開發過程。Servlet 可以作為提供web服務能力的壹個接入方式

現在也許可以理解了什麽是Servlet什麽是JSP,它們之間的關系是怎樣的。

  • 上一篇:請問同花順level-2逐筆委托在哪裏
  • 下一篇:請問草圖大師sketchup封面的快捷鍵是什麽啊?
  • copyright 2024編程學習大全網