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项目结构。您可以在下载所有依赖项并仔细阅读代码后将其打开。