版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/1605607
J2EE Architecture(7)
1、Servlet上下文
Web伺服器能支援若幹Web應用程式。每個Web應用程式又能支援一個或多個Servlet。
同一個Web應用程式的多個Servlet需要共享Web應用程式環境的資源。為此,Servlet規範提供了一個ServletContext接口。
Servlet可利用ServletContext對象執行登陸事件,獲得資源的URL索引,也可設定和存儲Web應用程式需要的屬性。
對于ServletContext而言,最重要的上下文資訊包括:
1)初始化參數
用來初始化應用程式。這些參數由部署描述符中的“鍵-值”對提供。
ServletContext API允許通過getInitParameter()和getInitParameterNames()等方法通路這些初始化參數。
2)上下文屬性
是一組應用程式屬性,由Web應用程式的Servlet共享。
可設定和獲得參數,也可通過程式設計方法,從Web應用程式中删除上下文屬性。
ServletContext API允許通過多種方法通路上下文屬性:setAttribute()、getAttribute()、removeAttribute()和getAttributeNames()等。
3)資源
“靜态”内容檔案的層次,是Web應用程式的一部分,被稱為“Web應用程式資源”,包括HTML、GIF和JPEG等檔案。
ServletContext API可通過多種方式通路這些資源,如getResource()和getResourceAsStream()等。
2、請求
Servlet的服務方法有權通路請求對象ServletRequest或HttpServletRequest。
請求對象包含客戶請求及其它一些相關資訊,該對象将用作傳給service()方法的兩個參數中的第一個參數。
請求參數采用“鍵-值”對格式。在特定環境下,一些鍵可能有多個值。
HttpServletRequest對象的幾個重要方面如下:
1)屬性
是與HttpServletRequest對象相關的對象。
屬性也采用“鍵-值”對形式,但一個屬性僅有一個值。
HttpServletRequest API可用多種方法通路屬性:getAttribute()、setAttribute()和getAttributeNames()等。
2)頭
頭是HTTP請求的一部分,Servlet可通過HttpServletRequest API方法,如getHeader()、getHeaders()或getHeaderNames()等通路這些頭資訊。
HttpServletRequest對象的頭可能包含integer、date的文本表示。為了通路它們,HttpServletRequest API提供了getIntHeader()和getDateHeader()方法。
3)Cookie
HTTP請求通常伴随着一個或多個Cookie,這些Cookie包含寶貴資料。
Cookie可以幫助Web應用程式建構用戶端和伺服器應用之間的會話。
HttpServletRequest API提供諸如getCookie()的方法,以便通路Cookie,并建立和維護會話。
3、響應
Servlet的服務方法有權通路響應對象。響應對象将是ServletResponse或HttpServletResponse。該對象包含了響應用戶端的資訊和所有其它相關細節,是service()方法兩個參數的第二個參數。
用戶端響應打包在HttpServletResponse對象在。HttpServletResponse對象的重要組成部分有:
1)頭
發送給用戶端的頭資訊可通過HttpServletResponse API獲得。
諸如addHeader()方法可用于建立發送給用戶端的頭資訊。
setHeader()方法可用于設定相應頭的頭值。
對于特定的類型,如integer和date型,HttpServletResponse API提供了addIntHeader()、setIntHeader()、addDateHeader()和setDateHeader()方法。
2)緩沖區
Servlet容器可以提供緩沖區功能,以增強“請求-響應”操作的性能和效率。
一些緩沖區功能可通過setBufferSize()、getBufferSize()、isCommitted()、reset()、resetBuffer()和flushBuffer()等方法實作。
3)響應類型和格式
發送給用戶端的輸出需要進行相應設定和簡化。
為此,HttpServletResponse API提供了以下方法:setContentType()、setContentLength()、getWriter()、getOutputStream()等。
開發人員需要根據setContentType()方法設定的内容類型設定響應格式。
例如:若setContentType()方法被設定為text/html類型,開發人員就需要根據業務需求設定相應的輸出格式。
程式設計人員在設計應用程式時,要認真選擇輸出的内容類型。還要了解輸出的表示部分,并全面了解HTML等表示語言的文法。
----------------------------
完成了HttpServletResponse對象就意味着service()方法執行結束。
在關閉響應時,Servlet容器必須清空客戶響應緩沖區剩餘的所有内容。