我正处于为webapp编写自定义错误页面的情况(主要是为了减少servlet容器的默认错误页面中的信息泄露)。由于我需要每个错误状态代码的错误页面,我将不得不对每个代码有一个明智的响应。据我所知,这些错误页面不一定非常用户友好,但只是将所有内容重定向到单个“出错”错误页面将使诊断问题变得非常困难。
所以我想知道是否有一个Java库可以提供HTTP状态代码和简短的人类可读描述之间的良好映射(理想情况下是一个2-4字的“摘要”,用作页面标题,以及在摘要中扩展的1-3句话消息)。然后我可以在JSP中使用它来提供有关错误类的一些反馈。如果不是,我敢肯定我自己可以写一个,但如果发明了轮子,我很乐意使用它们。
答案 0 :(得分:11)
所以我想知道是否有Java 提供良好映射的库 HTTP状态代码和简要说明之间 人类可读的描述 (理想情况下是一个2-4字的“摘要”,供使用 作为页面标题,以及1-3 句子消息扩大了 摘要)。
是的,Apache Commons HttpClient具有此功能。 HttpStatus
类具有相同的int
常量列表,您可以在其他地方找到它,但它还有一个static String getStatusText(int)
方法,它返回一个人类可读的状态代码描述。
以下是Maven
依赖项:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
示例代码:
import org.apache.commons.httpclient.HttpStatus;
String responseMessage = HttpStatus.getStatusText(HttpStatus.SC_OK);
System.out.println(responseMessage);
打印:
OK
答案 1 :(得分:7)
我想您可能会喜欢Spring解决方案: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html
答案 2 :(得分:5)
也许最简单的解决方案是使用下一个功能:
httpResponse.getStatusLine().getReasonPhrase()
它准确地返回所需内容。
答案 3 :(得分:4)
抽象类“HttpURLConnection”为所有HTTP状态代码提供常量int值。其文档对每个常量都有简短的口头描述。您可以使用这些值和字符串使自己成为一个简单的枚举,然后使用它。
答案 4 :(得分:4)
最新的apache http组件v4 +(httpCoponents)
介绍以下内容: HttpStatus作为包含所有httpStatuses的枚举
对于他们的描述使用: EnglishReasonPhraseCatalog.INSTANCE.getReason(code,Locale.ENGLISH);
您的状态代码==代码,例如:200
例如:
HttpStatus.SC_FORBIDDEN == 403
EnglishReasonPhraseCatalog.INSTANCE.getReason(403, Locale.ENGLISH) == "Forbidden"
答案 5 :(得分:1)
如果你正在使用Jersey(或在你的类路径上使用它),javax.ws.rs.core.Response.Status
枚举包含来自HTTP规范的人类可读“原因”,例如: Response.Status.fromStatusCode(404).toString()
提供"Not Found"
。
答案 6 :(得分:0)
您可以使用我的HttpStatus JSP Tag Libray:
<%@ 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>
具体来说,如上例所示,<hs:reason/>
标记用于显示页面&#39中当前HTTP状态代码的原因短语(人类可读描述)标题和第一个标题。
此外,<hs:code/>
标记用于显示当前的HTTP状态代码和<hs:cause/>
标记,以显示导致错误的异常消息。