JSP HTTP 狀態碼
jsp http 狀態碼
http請求與http響應的格式相近,都有著如下結構:
- 以狀態行+crlf(回車換行)開始
- 零行或多行頭模塊+crlf
- 一個空行,比如crlf
- 可選的消息體比如文件,查詢數據,查詢輸出
舉例來說,一個服務器響應頭看起來就像下面這樣:
http/1.1 200 ok content-type: text/html header2: ... ... headern: ... (blank line) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>狀態行包含http版本,一個狀態碼,和狀態碼相對應的短消息。
下表列出了可能會從服務器返回的http狀態碼和與之關聯的消息:
狀態碼 | 消息 | 描述 |
---|---|---|
100 | continue | 只有一部分請求被服務器接收,但只要沒被服務器拒絕,客戶端就會延續這個請求 |
101 | switching protocols | 服務器交換機協議 |
200 | ok | 請求被確認 |
201 | created | 請求時完整的,新的資源被創建 |
202 | accepted | 請求被接受,但未處理完 |
203 | non-authoritative information | |
204 | no content | |
205 | reset content | |
206 | partial content | |
300 | multiple choices | 一個超鏈接表,用戶可以選擇一個超鏈接并訪問,最大支持5個超鏈接 |
301 | moved permanently | 被請求的頁面已經移動到了新的url下 |
302 | found | 被請求的頁面暫時性地移動到了新的url下 |
303 | see other | 被請求的頁面可以在一個不同的url下找到 |
304 | not modified | |
305 | use proxy | |
306 | unused | 已經不再使用此狀態碼,但狀態碼被保留 |
307 | temporary redirect | 被請求的頁面暫時性地移動到了新的url下 |
400 | bad request | 服務器無法識別請求 |
401 | unauthorized | 被請求的頁面需要用戶名和密碼 |
402 | payment required | 目前還不能使用此狀態碼 |
403 | forbidden | 禁止訪問所請求的頁面 |
404 | not found | 服務器無法找到所請求的頁面 |
405 | method not allowed | 請求中所指定的方法不被允許 |
406 | not acceptable | 服務器只能創建一個客戶端無法接受的響應 |
407 | proxy authentication required | 在請求被服務前必須認證一個代理服務器 |
408 | request timeout | 請求時間超過了服務器所能等待的時間,連接被斷開 |
409 | conflict | 請求有矛盾的地方 |
410 | gone | 被請求的頁面不再可用 |
411 | length required | "content-length"沒有被定義,服務器拒絕接受請求 |
412 | precondition failed | 請求的前提條件被服務器評估為false |
413 | request entity too large | 因為請求的實體太大,服務器拒絕接受請求 |
414 | request-url too long | 服務器拒絕接受請求,因為url太長。多出現在把"post"請求轉換為"get"請求時所附帶的大量查詢信息 |
415 | unsupported media type | 服務器拒絕接受請求,因為媒體類型不被支持 |
417 | expectation failed | |
500 | internal server error | 請求不完整,服務器遇見了出乎意料的狀況 |
501 | not implemented | 請求不完整,服務器不提供所需要的功能 |
502 | bad gateway | 請求不完整,服務器從上游服務器接受了一個無效的響應 |
503 | service unavailable | 請求不完整,服務器暫時重啟或關閉 |
504 | gateway timeout | 網關超時 |
505 | http version not supported | 服務器不支持所指定的http版本 |
設置http狀態碼的方法
下表列出了httpservletresponse 類中用來設置狀態碼的方法:
s.n. | 方法 & 描述 |
---|---|
1 | public void setstatus ( int statuscode ) 此方法可以設置任意的狀態碼。如果您的響應包含一個特殊的狀態碼和一個文檔,請確保在用printwriter返回任何內容前調用setstatus方法 |
2 | public void sendredirect(string url) 此方法產生302響應,同時產生一個 location 頭告訴url 一個新的文檔 |
3 | public void senderror(int code, string message) 此方法將一個狀態碼(通常為 404)和一個短消息,自動插入html文檔中并發回給客戶端 |
http狀態碼程序示例
接下來的例子將會發送407錯誤碼給瀏覽器,然后瀏覽器將會告訴您"need authentication!!!"。
<html> <head> <title>setting http status code</title> </head> <body> <% // 設置錯誤代碼,并說明原因 response.senderror(407, "need authentication!!!" ); %> </body> </html>
訪問以上jsp頁面,將會得到以下結果:

您也可以試試使用其他的狀態碼,看會不會得到什么意想不到結果。