SUN認證考試知識點:java servlet生命週期
Servlet是使用 Java Servlet應用程序設計接口及相關類和方法的Java程序。它在Web服務器上或應用服務器上運行並擴展了該服務器的能力。Java Servlet對於Web服務器就好像Java Applet對於Web瀏覽器。Applet裝入Web瀏覽器並在Web瀏覽器內執行,而Servlet則是裝入Web服務器並在Web服務器內執行。 Java Servlet API 定義了Servlet和服務器之間的一個標準接口,這使得Servlet具有跨服務器平臺的特性。
Servlet通過創建一個框架擴展服務器的能力,採用請求-響應模式提供 Web服務。當客戶機發送請求至服務器時,服務器將請求信息發送給Servlet,Servlet生成響應內容並將其傳給Server,然後再由 Server將響應返回給客戶端。
Servlet的功能
Servlet的功能涉及範圍很廣。例如,Servlet可完成如下功能:
創建並返回一個包含基於客戶請求性質的動態內容的完整的 HTML頁面。
創建可嵌入到現有 HTML 頁面中的一部分 HTML 頁面(HTML 片段)。與其他服務器資源(文件、數據庫、Applet、Java應用程序等)進行通信。
用多個客戶機處理連接,接受多個客戶機的輸入,並將結果廣播到多個客戶機上。例如,Servlet 可以是多參與者的遊戲服務器。
允許在單連接方式下傳送數據的情況下,在瀏覽器上打開服務器至Applet的新連接,並將該連接保持在打開狀態。允許客戶機和服務器簡單、高效地執行會話的情況下,Applet也可以啓動客戶瀏覽器和服務器之間的連接。可以通過定製協議或標準(如 IIOP)進行通信。
對特殊的處理採用 MIME 類型過濾數據,例如圖像轉換和服務器端(包括SSI)。
將定製的處理提供給所有服務器的標準例行程序。例如,Servlet 可以修改如何認證用戶。
那麼Java Servlet與一些現有的網絡技術有什麼具體的`差別呢?
Java Servlet與Applet之間的差別 從基本上來說,Servlet與 Applet 是截然相反的。Servlet可以被視爲服務器方面的 Applet。Servlet在網絡服務器內運行而Applet在網絡瀏覽器內運行。瀏覽器提交一個請求執行Servlet的命令;而由於瀏覽器可直接命令Applet,所以它可以在運行時單機運行。
Java Servlet與CGI之間的差別 與傳統的CGI和許多其他類似CGI的技術相比,Java Servlet具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資。其中最大的區別是在性能方面。
在傳統的CGI中,每個請求都要啓動一個新的進程,如果CGI程序本身的執行時間較短,啓動進程所需要的開銷很可能反而超過實際執行時間。而使用Servlet時,服務器上僅有一個Java虛擬機在運行,只有當Servlet被調用時,它才被加載,且直到Servlet更改時,它纔會被再次加載。在傳統CGI中,如果有N個併發的對同一CGI程序的請求,則該CGI程序的代碼在內存中重複裝載了N次;而對於Servlet,處理請求的是N個線程,只需要一份Servlet類代碼。在性能優化方面,Servlet也比CGI有着更多的選擇,比如緩衝以前的計算結果,保持數據庫連接的活動,等等。
通過使用Servlet API,開發人員不必擔心服務器的內部運作方式。表格資料、服務器頭、cookies等皆可通過Servlet處理。另外,因爲Servlet是用 Java寫的,能將其從一個服務器移到另一個服務器以供發佈,同時不必擔心操作系統或服務器的類型。這一優點充分體現了Java"一次編寫,隨處運行"的優越特性。
Servlet的生命週期
Servlet的生命週期定義了一個Servlet如何被加載、初始化,以及它怎樣接收請求、響應請求、提供服務。
在代碼中,Servlet生命週期由接口 let定義。所有的Java Servlet 必須直接或間接地實現let接口,這樣才能在Servlet Engine上運行。Servlet Engine提供network Service,響應MIME request,運行Servlet Container。 let接口定義了一些方法,在Servlet 的生命週期中,這些方法會在特定時間按照一定的順序被調用。如圖14-1所示。
Servlet 如何被加載(Load)、被實例化(Instantiated)
Servlet Engine 負責實例化和加載Servlet,這個過程可以在Servlet Engine 加載時執行,可以在Servlet 響應請求時執行,也可以在兩者之間的任何時候執行。
Servlet如何被初始化(Initialized)
Servlet Engine 加載好Servlet 後,必須要初始化它。初始化時Servlet 可以從數據庫裏讀取初始數據,建立JDBC Connection,或者建立對其他有價值的資源的引用。
在初始化階段,Init( )方法被調用。這個方法在et接口中定義。Init( )方法以一個Servlet 配置文件(ServletConfig 型)爲參數。Servlet configuration 對象由Servlet Engine 實現,可以讓Servlet 從中讀取一些name-value對的參數值。ServletConfig對象還可以讓Servlet接受一個Servlet Context對象。
Servlet 如何處理請求
Servlet 被初始化以後,就處於能響應請求的就緒狀態。每個對Servlet 的請求由一個Servlet Request 對象代表。Servlet 給客戶端的響應由一個Servlet Response對象代表。當客戶端有一個請求時,Servlet Engine 將ServletRequest 和ServletResponse對象都轉發給Servlet,這兩個對象以參數的形式傳給Service方法。這個方法由 let定義並由具體的Servlet 實現。
Servlet還可以實現 ServletRequest 和ServletResponse接口。ServletRequest接口可以讓Servlet 獲取客戶端請求中的參數,如form data、request信息、協議類型,等等。Servlet 可以從ServletInputStream流中讀取request 數據。ServletResponse接口允許Servlet設置response headers和status codes。實現這個接口可以使Servlet能訪問ServletOutputStream流用來向客戶端返回數據。
Servlet如何被釋放
Servlet Engine 沒有必要在Servlet 生命週期的每一段時間內都保持Servlet的狀態。Servlet Engine可以隨時隨意使用或釋放Servlet。因此,你不能依賴Servlet class或其成員存儲信息。當Servlet Engine判斷一個Servlet應當被釋放時(比如說Engine準備Shut down 或需要回收資源),Engine必須讓Servlet 能釋放其正在使用的任何資源,並保存持續性的狀態信息。這些可以通過調用Servlet的destroy方法實現。 在Servlet Engine 釋放一個Servlet 以前,必須讓其完成當前實例的service方法或是等到timeout(如果Engine定義了timeout)。當Engine釋放一個 Servlet以後,Engine將不能再將請求轉發給它,Engine必須徹底釋放該Servlet並將其標明爲可回收的(給garbage collection)。
在Servlet API中最重要的是Servlet interface。所有的Servlets執行這個interface的方式有很多種:或者是直接的,或者通過extending這個class執行它,如 HttpServlet。這個Servlet interface 提供並安排Servlet與客戶端聯繫的方法。Servlet 編寫者可以在他們開發Servlet程序時提供更多一些或所有這樣的方法。
當一個Servlet接收來自客戶端的調用請求時,它接收兩個對象:一個是 ServletRequest,另外一個是ServletResponse。這個ServletRequest class 概括從客戶端到服務器之間的聯繫,而 ServletResponse class 概括從Servlet返回客戶端的聯繫。
ServletRequest interface 可以獲取到這樣一些信息,如由客戶端傳送的參數名稱,客戶端正在使用的協議,產生請求並且接收請求的服務器遠端主機名。它也提供獲取數據流的 Servlet、ServletInputStream,這些數據是客戶端引用中使用HTTP POST和PUT方法遞交的。一個ServletRequest的子類可以讓Servlet獲取更多的協議特性數據。
例如,HttpServletRequest 包含獲取HTTP-specific頭部信息的方法。ServletResponse interface 給出相應客戶端的Servlet方法。它允許Servlet設置內容長度和迴應的MIME類型,並且提供輸出流ServletOutputStream,通過編寫者可以發回相應數據。ServletResponse子類可以給出更多protocol-specific容量的信息。例如,HttpServletResponse 包含允許Servlet操作HTTP-specific頭部信息的方法。
上面有關classes 和 interfaces的描述構成了一個基本的Servlet框架。HTTP Servlets有一些附加的可以提供session-tracking capabilities的方法。Servlet編寫者可以用這些API在有他人操作時維護Servlet與客戶端之間的狀態。
相關文章
-
JAVA認證基礎知識:JavaNativeInterface學習小結
JNI是Java Native Interface的縮寫,中文爲JAVA本地調用。使用JNI可以很方便的用我們的Java程序調用C/C++程序。很多時候,某些功能用Java無法實現,比如說涉及到底層驅動的一些功能,這時候我們就可以利用JNI來調用C或者C++ -
SUN認證考試知識點:Java Socket通信讀取相關信息代碼
留學自薦信如何寫?首先,千萬不要遺漏掉那些有用的和中肯的成就、經驗等事實。申請研讀的學位越高,以往的科研、學術成果和工作經驗等等就越是重要。許多申請者錯誤地認爲自己發表的文章已經列在履歷裏面了,在自薦信中就 -
java的String=a; a==null和a.equals(null)這兩個判斷有什麼區別
總結是對某一特定時間段內的學習和工作生活等表現情況加以回顧和分析的一種書面材料,它在我們的學習、工作中起到呈上啓下的作用,不如靜下心來好好寫寫總結吧。我們該怎麼去寫總結呢?以下是小編精心整理的家長學校學期工 -
Java認證考試知識點:JavaSE6的新功能
Java SE 6的十大新功能及你應該升級到Java SE 6上的十大原因。這十大看點以次是: 1新的安全功能:Java 6對於安全的新支持主要有:JSR 105: XML DSIG API/implementation、本地平臺GSS/Kerberos的集成、JSR 268: Smart Ca -
Java認證考試知識點:Spring獲取Bean四種方法
下面YJBYS小編爲大家整理了Spring獲取Bean四種方法,希望對你有所幫助。更多Java認證考試信息,盡在應屆畢業生培訓網! 方法一:通過Spring提供的工具類獲取ApplicationContext對象代碼:import pplicationContextUtils;Ap -
雅思閱讀模擬試題:Sun's fickle heart may leave us cold
雅思閱讀模擬試題實戰訓練題:How a Frenchman is reviving McDonald's in EuropeA. When Denis Hennequin took over as the European boss of McDonald's in January 2004, the world's biggest rest -
MS SQL Server Management Studio Express安裝圖文具體步驟
Microsoft sql server Management Studio Express (SSMSE) 是一種免費、易用的圖形管理工具,用於管理 SQL Server 2005 Express Edition 和具有高級服務的 SQL Server 2005 Express Edition。SSMSE 還可以管理任何版本 -
英語習慣用語:just for laughs; laugh up ones sleeve
在日常學習、工作或生活中,大家都不可避免地會接觸到書信吧,書信在人類的交流與溝通的歷史上佔有重要地位。相信許多人會覺得書信很難寫吧,以下是小編爲大家收集的給哥哥的一封信作文,歡迎大家分享。給哥哥的一封信作文1 -
英語閱讀:African Union Leaders Talk Mali, Chinese Investmen
African leaders met in Ethiopia during the weekend to celebrate the 50th anniversary of their continental alliance and discuss issues such as Chinese investment on the continent as well as the fight a -
公共英語二級寫作Preserving Natural Resources
Through the changes in the ways of making a living in a family over several generations, the cartoon aims at sounding a waing against mans wasteful use of natural resources and emphasizing the urgent