天天看點

JSP用戶端請求和伺服器響應知識點

當浏覽器請求一個網頁時,它會向網絡伺服器發送一系列不能被直接讀取的資訊,因為這些資訊是作為HTTP資訊頭的一部分來傳送的。接下來學習一些浏覽器端資訊頭的重要内容,在以後的網絡程式設計中将會經常見到這些資訊:

資訊 描述
Accept 指定浏覽器或其他用戶端可以處理的MIME類型。它的值通常為 image/png 或 image/jpeg
Accept-Charset 指定浏覽器要使用的字元集。比如 ISO-8859-1
Accept-Encoding 指定編碼類型。它的值通常為 gzip 或compress
Accept-Language 指定用戶端首選語言,servlet會優先傳回以目前語言構成的結果集,如果servlet支援這種語言的話。比如 en,en-us,ru等等
Authorization 在通路受密碼保護的網頁時識别不同的使用者
Connection 表明用戶端是否可以處理HTTP持久連接配接。持久連接配接允許用戶端或浏覽器在一個請求中擷取多個檔案。Keep-Alive 表示啟用持久連接配接
Content-Length 僅适用于POST請求,表示 POST 資料的位元組數
Cookie 傳回先前發送給浏覽器的cookies至伺服器
Host 指出原始URL中的主機名和端口号
If-Modified-Since 表明隻有當網頁在指定的日期被修改後用戶端才需要這個網頁。 伺服器發送304碼給用戶端,表示沒有更新的資源
If-Unmodified-Since 與If-Modified-Since相反, 隻有文檔在指定日期後仍未被修改過,操作才會成功
Referer 标志着所引用頁面的URL。比如,如果你在頁面1,然後點了個連結至頁面2,那麼頁面1的URL就會包含在浏覽器請求頁面2的資訊頭中
User-Agent 用來區分不同浏覽器或用戶端發送的請求,并對不同類型的浏覽器傳回不同的内容

HttpServletRequest類

request對象是javax.servlet.http.HttpServletRequest類的執行個體。每當用戶端請求一個頁面時,JSP引擎就會産生一個新的對象來代表這個請求。

request對象提供了一系列方法來擷取HTTP資訊頭,包括表單資料,cookies,HTTP方法等等。

詳細内容見下表:

序号 方法& 描述
1

Cookie[] getCookies()

傳回用戶端所有的Cookie的數組

2

Enumeration getAttributeNames()

傳回request對象的所有屬性名稱的集合

3

Enumeration getHeaderNames()

傳回所有HTTP頭的名稱集合

4

Enumeration getParameterNames()

傳回請求中所有參數的集合

5

HttpSession getSession()

傳回request對應的session對象,如果沒有,則建立一個

6

HttpSession getSession(boolean create)

傳回request對應的session對象,如果沒有并且參數create為true,則傳回一個新的session對象

7

Locale getLocale()

傳回目前頁的Locale對象,可以在response中設定

8

Object getAttribute(String name)

傳回名稱為name的屬性值,如果不存在則傳回null。

9

ServletInputStream getInputStream()

傳回請求的輸入流

10

String getAuthType()

傳回認證方案的名稱,用來保護servlet,比如 “BASIC” 或者 “SSL” 或 null 如果 JSP沒設定保護措施

11

String getCharacterEncoding()

傳回request的字元編碼集名稱

12

String getContentType()

傳回request主體的MIME類型,若未知則傳回null

13

String getContextPath()

傳回request URI中指明的上下文路徑

14

String getHeader(String name)

傳回name指定的資訊頭

15

String getMethod()

傳回此request中的HTTP方法,比如 GET,,POST,或PUT

16

String getParameter(String name)

傳回此request中name指定的參數,若不存在則傳回null

17

String getPathInfo()

傳回任何額外的與此request URL相關的路徑

18

String getProtocol()

傳回此request所使用的協定名和版本

19

String getQueryString()

傳回此 request URL包含的查詢字元串

20

String getRemoteAddr()

傳回用戶端的IP位址

21

String getRemoteHost()

傳回用戶端的完整名稱

22

String getRemoteUser()

傳回用戶端通過登入認證的使用者,若使用者未認證則傳回null

23

String getRequestURI()

傳回request的URI

24

String getRequestedSessionId()

傳回request指定的session ID

25

String getServletPath()

傳回所請求的servlet路徑

26

String[] getParameterValues(String name)

傳回指定名稱的參數的所有值,若不存在則傳回null

27

boolean isSecure()

傳回request是否使用了加密通道,比如HTTPS

28

int getContentLength()

傳回request主體所包含的位元組數,若未知的傳回-1

29

int getIntHeader(String name)

傳回指定名稱的request資訊頭的值

30

int getServerPort()

傳回伺服器端口号

JSP 伺服器響應

Response響應對象主要将JSP容器處理後的結果傳回到用戶端。可以通過response變量設定HTTP的狀态和向用戶端發送資料,如Cookie、HTTP檔案頭資訊等。

表摘要出了HTTP1.1響應頭中最有用的部分

響應頭 描述
Allow 指定伺服器支援的request方法(GET,POST等等)
Cache-Control 指定響應文檔能夠被安全緩存的情況。通常取值為 public,private 或no-cache 等等。 Public意味着文檔可緩存,Private意味着文檔隻為單使用者服務并且隻能使用私有緩存。No-cache 意味着文檔不被緩存。
Connection 指令浏覽器是否要使用持久的HTTP連接配接。close值 指令浏覽器不使用持久HTTP連接配接,而keep-alive 意味着使用持久化連接配接。
Content-Disposition 讓浏覽器要求使用者将響應以給定的名稱存儲在磁盤中
Content-Encoding 指定傳輸時頁面的編碼規則
Content-Language 表述文檔所使用的語言,比如en, en-us,,ru等等
Content-Length 表明響應的位元組數。隻有在浏覽器使用持久化 (keep-alive) HTTP 連接配接時才有用
Content-Type 表明文檔使用的MIME類型
Expires 指明啥時候過期并從緩存中移除
Last-Modified 指明文檔最後修改時間。用戶端可以 緩存文檔并且在後續的請求中提供一個 If-Modified-Since請求頭
Location 在300秒内,包含所有的有一個狀态碼的響應位址,浏覽器會自動重連然後檢索新文檔
Refresh 指明浏覽器每隔多久請求更新一次頁面。
Retry-After 與503 (Service Unavailable)一起使用來告訴使用者多久後請求将會得到響應
Set-Cookie 指明目前頁面對應的cookie

HttpServletResponse類

response 對象是 javax.servlet.http.HttpServletResponse 類的一個執行個體。就像伺服器會建立request對象一樣,它也會建立一個用戶端響應。

response對象定義了處理建立HTTP資訊頭的接口。通過使用這個對象,開發者們可以添加新的cookie或時間戳,還有HTTP狀态碼等等。

下表列出了用來設定HTTP響應頭的方法,這些方法由HttpServletResponse 類提供:

S.N. 方法 & 描述
1

String encodeRedirectURL(String url)

對sendRedirect()方法使用的URL進行編碼

2

String encodeURL(String url)

将URL編碼,回傳包含Session ID的URL

3

boolean containsHeader(String name)

傳回指定的響應頭是否存在

4

boolean isCommitted()

傳回響應是否已經送出到用戶端

5

void addCookie(Cookie cookie)

添加指定的cookie至響應中

6

void addDateHeader(String name, long date)

添加指定名稱的響應頭和日期值

7

void addHeader(String name, String value)

添加指定名稱的響應頭和值

8

void addIntHeader(String name, int value)

添加指定名稱的響應頭和int值

9

void flushBuffer()

将任何緩存中的内容寫入用戶端

10

void reset()

清除任何緩存中的任何資料,包括狀态碼和各種響應頭

11

void resetBuffer()

清除基本的緩存資料,不包括響應頭和狀态碼

12

void sendError(int sc)

使用指定的狀态碼向用戶端發送一個出錯響應,然後清除緩存

13

void sendError(int sc, String msg)

使用指定的狀态碼和消息向用戶端發送一個出錯響應

14

void sendRedirect(String location)

使用指定的URL向用戶端發送一個臨時的間接響應

15

void setBufferSize(int size)

設定響應體的緩存區大小

16

void setCharacterEncoding(String charset)

指定響應的編碼集(MIME字元集),例如UTF-8

17

void setContentLength(int len)

指定HTTP servlets中響應的内容的長度,此方法用來設定 HTTP Content-Length 資訊頭

18

void setContentType(String type)

設定響應的内容的類型,如果響應還未被送出的話

19

void setDateHeader(String name, long date)

使用指定名稱和值設定響應頭的名稱和内容

20

void setHeader(String name, String value)

使用指定名稱和值設定響應頭的名稱和内容

21

void setIntHeader(String name, int value)

指定 int 類型的值到 name 标頭

22

void setLocale(Locale loc)

設定響應的語言環境,如果響應尚未被送出的話

23

void setStatus(int sc)

設定響應的狀态碼

繼續閱讀