HttpStatus
1.1.1
一個簡單的JSP標籤庫,用於顯示JSP錯誤頁面中HTTP狀態代碼的代碼,原因,原因和/或消息。
例如:
<%@ page isErrorPage = " true " %>
<%@ taglib prefix = " hs " uri = " http://erik.thauvin.net/taglibs/httpstatus " %>
< html >< head >
< title >< hs:code /> < hs:reason default = " Server Error " /></ title >
</ head >
< h1 >< hs:reason default = " Server Error " /></ h1 >
Cause: < pre >< hs:cause default = " Unable to complete your request. " /></ pre >
Message: < pre >< hs:message default = " A server error has occured. " /></ pre >
...或者
<%@ page isErrorPage = " true " import = " net.thauvin.erik.httpstatus.Reasons " %>
<%= Reasons . getReasonPhrase(pageContext . getErrorData() . getStatusCode()) % >將在501狀態代碼上顯示:
Not Implemented 在您的build.gradle文件中包括以下內容:
repositories {
mavenCentral()
}
dependencies {
implementation ' net.thauvin.erik.httpstatus:httpstatus:1.1.1 '
}在您的bld構建文件中包括以下內容:
scope ( compile ). include (
dependency ( "net.thauvin.erik.httpstatus" , "httpstatus" , version ( 1 , 1 , 0 ))
);作為Maven小工子:
< dependency >
< groupId >net.thauvin.erik.httpstatus</ groupId >
< artifactId >httpstatus</ artifactId >
< version >1.1.1</ version >
</ dependency ><hs:cause/>標籤顯示當前HTTP狀態代碼的原因(如果有)。速記:
<%= pageContext . getErrorData() . getThrowable() . getCause() . getLocalizedMessage() % >可選屬性是:
| 屬性 | 描述 |
|---|---|
default | 如果沒有原因是,輸出的後備值是 |
escapeXml | 將其轉換為<,>,',“將其相應的實體代碼。默認值為true 。 |
<hs:code/> tag顯示當前的HTTP狀態代碼(如果有)。速記:
<%= pageContext . getErrorData() . getStatusCode() % ><hs:message/> tag顯示當前錯誤消息(如果有)。速記:
<%= request . getAttribute( " javax.servlet.error.message " ) % >可選屬性是:
| 屬性 | 描述 |
|---|---|
default | 如果沒有錯誤消息,則輸出的後備值。 |
escapeXml | 將其轉換為<,>,',“將其相應的實體代碼。默認值為true 。 |
<hs:reason/>標籤顯示HTTP狀態代碼的原因(如果有)。可選屬性是:
| 屬性 | 描述 |
|---|---|
default | 如果沒有理由,則輸出的後備值。 |
code | HTTP狀態錯誤代碼。如果未指定,則使用當前狀態代碼。 |
escapeXml | 將其轉換為<,>,',“將其相應的實體代碼。默認值為true 。 |
StatusCode BEAN可用於檢查狀態代碼錯誤的類。例如,使用JSTL:
<%@ taglib prefix = " hs " uri = " http://erik.thauvin.net/taglibs/httpstatus " %>
<%@ taglib prefix = " c " uri = " http://java.sun.com/jsp/jstl/core " %>
< jsp:useBean id = " statusCode " class = " net.thauvin.erik.httpstatus.StatusCode " />
< c:set target = " ${ statusCode } " property = " code " >< hs:code /></ c:set >
< c:choose >
< c:when test = " ${ statusCode . isClientError() } " >
An error occurred on your side. (< hs:reason />)
</ c:when >
< c:otherwise >
An error occurred on our side. (< hs:message />)
</ c:otherwise >
</ c:choose >或在servlet中:
import net . thauvin . erik . httpstatus . StatusCode ;
public class ExampleServlet extends HttpServlet {
public void doGet ( HttpServletRequest request , HttpServletResponse response ) {
var statusCode = new StatusCode (
( Integer ) request . getAttribute ( "javax.servlet.error.status_code" ));
if ( statusCode . isError ()) {
if ( statusCode . isServerError ()) {
var reason = statusCode . getReason ();
} else {
// ...
}
}
}
} StatusCode bean方法是:
| 方法 | 描述 |
|---|---|
getReason | 返回狀態代碼的原因(例如: Internal Server Error ) |
isClientError | 檢查狀態代碼是否是客戶端錯誤。 |
isError | 檢查狀態代碼是服務器還是客戶端錯誤。 |
isInfo | 檢查狀態代碼是否為信息。 |
isRedirect | 檢查狀態代碼是否是重定向。 |
isServerError | 檢查狀態代碼是否是服務器錯誤。 |
isSuccess | 檢查狀態代碼是否成功。 ( OK ) |
isValid | 檢查狀態代碼是否有效。 |
原因是在ResourceBundle屬性中定義的,如下所示:
| 狀態代碼 | 原因 |
|---|---|
100 | 繼續 |
101 | 切換協議 |
102 | 加工 |
103 | 早期提示 |
110 | 響應是陳舊的 |
111 | 重新驗證失敗了 |
112 | 斷開操作 |
113 | 啟發式到期 |
199 | 其他警告 |
200 | 好的 |
201 | 創建 |
202 | 公認 |
203 | 非授權信息 |
204 | 沒有內容 |
205 | 重置內容 |
206 | 部分內容 |
207 | 多地位 |
208 | 已經報告了 |
214 | 應用轉換 |
218 | 這很好 |
226 | 我用過 |
299 | 雜項持續警告 |
300 | 多種選擇 |
301 | 永久移動 |
302 | 暫時發現/移動 |
303 | 看到其他 |
304 | 未修改 |
305 | 使用代理 |
306 | 未使用 |
307 | 臨時重定向 |
308 | 永久重定向 |
400 | 錯誤的請求 |
401 | 未經授權 |
402 | 需要付款 |
403 | 禁止 |
404 | 未找到 |
405 | 方法不允許 |
406 | 不可接受 |
407 | 需要代理身份驗證 |
408 | 請求超時 |
409 | 衝突 |
410 | 走了 |
411 | 需要長度 |
412 | 前提失敗 |
413 | 有效載荷太大 |
414 | Uri太久了 |
415 | 不支持的媒體類型 |
416 | 範圍不滿意 |
417 | 期望失敗 |
418 | 我是茶壺 |
419 | 資源空間不足 |
420 | 方法故障 |
421 | 誤導請求 |
422 | 無法處理的內容 |
423 | 鎖定 |
424 | 失敗的依賴性 |
425 | 太早了 |
426 | 需要升級 |
428 | 需要前提 |
429 | 請求太多 |
430 | 請求標題字段太大 |
431 | 請求標題字段太大 |
440 | 登錄超時 |
444 | 沒有回應 |
449 | 重試 |
450 | 被Windows父母控制所阻擋 |
451 | 由於法律原因無法使用 |
460 | 客戶關閉連接在加載平衡器閒置超時之前 |
463 | 帶有30多個IP地址的X前向標頭 |
494 | 要求標題太大 |
495 | SSL證書錯誤 |
496 | 需要SSL證書 |
497 | HTTP請求發送到HTTPS端口 |
498 | 令牌已過期/無效 |
499 | 客戶關閉的請求 |
500 | 內部服務器錯誤 |
501 | 未實施 |
502 | 壞網關 |
503 | 暫停服務 |
504 | 網關超時 |
505 | 不支持HTTP版本 |
506 | 變體也談判 |
507 | 存儲不足 |
508 | 檢測到循環 |
509 | 帶寬極限超過 |
510 | 沒有延長 |
511 | 需要網絡身份驗證 |
520 | 未知錯誤 |
521 | Web服務器下降 |
522 | 連接時機 |
523 | 來源是無法到達的 |
524 | 發生了超時 |
525 | SSL握手失敗 |
526 | 無效的SSL證書 |
527 | 鐵路槍錯誤 |
529 | 站點超載 |
530 | 站點被冷凍 |
540 | 暫時禁用 |
561 | 未經授權 |
598 | 網絡讀取超時錯誤 |
599 | 網絡連接超時錯誤 |
783 | 意外的令牌 |
您可以查詢狀態代碼的原因如下:
$ java -jar httpstatus-1.1.1.jar 404 500
404: Not Found
500: Internal Server Error如果未指定狀態代碼,則將全部打印:
$ java -jar httpstatus-1.1.1.jar
100: Continue
101: Switching Protocols
102: Processing
103: Early Hints
110: Response is Stale
111: Revalidation Failed
112: Disconnected Operation
113: Heuristic Expiration
199: Miscellaneous Warning
200: OK
201: Created
202: Accepted
203: Non-Authoritative Information
...您還可以通過響應類打印狀態代碼:
$ java -jar httpstatus-1.1.1.jar 2xx
200: OK
201: Created
202: Accepted
203: Non-Authoritative Information
... 如果您想為此項目做出貢獻,那麼您要做的就是克隆GitHub存儲庫:
git clone [email protected]:ethauvin/HttpStatus.git然後使用bld構建:
cd HttpStatus
./bld compile該項目具有Intellij Ideas項目結構。您可以在下載所有依賴項並仔細閱讀代碼後將其打開。