16

我正在为 web 应用程序编写自定义错误页面(主要是为了减少 servlet 容器的默认错误页面的信息泄露)。由于每个错误状态代码都需要一个错误页面,因此我必须对每个代码做出合理的响应。据我所知,这些错误页面不必特别友好,但简单地将所有内容重定向到一个“它出错”的错误页面会使诊断问题变得非常困难。

所以我想知道是否有一个 Java 库可以在 HTTP 状态代码和它们的简短人类可读描述之间提供良好的映射(最好是 2-4 个单词的“摘要”,用作页面标题,以及在摘要上扩展的 1-3 句信息)。然后我可以在 JSP 中使用它来提供有关错误类的一些反馈。如果不是,我确定我可以自己写一个,但如果轮子已经发明出来,我很乐意使用它们。

4

7 回答 7

12

所以我想知道是否有一个 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
于 2009-12-26T09:33:50.570 回答
7

我想您可能会喜欢 Spring 解决方案: http ://static.springsource.org/spring/docs/3.0.x/api/org/springframework/http/HttpStatus.html

于 2010-01-26T00:31:39.087 回答
6

最新的 apache http 组件 v4+ ( httpCoponents )

引入以下内容: HttpStatus 作为包含所有 httpStatuses 的枚举

对于他们的描述使用:EnglishReasonPhraseCatalog.INSTANCE.getReason(code, Locale.ENGLISH);

您的状态代码 == 代码,例如:200

例如:

HttpStatus.SC_FORBIDDEN == 403
EnglishReasonPhraseCatalog.INSTANCE.getReason(403, Locale.ENGLISH) == "Forbidden"
于 2014-12-10T12:35:29.717 回答
5

也许最简单的解决方案是使用下一个功能:

httpResponse.getStatusLine().getReasonPhrase()

它准确地返回所需的内容。

于 2011-03-28T06:55:17.090 回答
4

抽象类 ' HttpURLConnection ' 为您提供所有 HTTP 状态代码的常量 int 值。它的文档对每个常数都有简短的口头描述。您可以使用这些值和字符串使自己成为一个简单的枚举,然后使用它。

于 2009-10-28T15:02:56.417 回答
1

如果您使用 Jersey(或将其放在类路径中),则javax.ws.rs.core.Response.Status枚举包含来自 HTTP 规范的人类可读的“原因”,例如Response.Status.fromStatusCode(404).toString()"Not Found".

于 2009-12-26T07:54:03.480 回答
0

您可以使用我的HttpStatus JSP 标签库

<%@ 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/>标签用于在页面标题和第一个标题中显示当前 HTTP 状态代码的原因短语(人类可读的描述)。

此外,该<hs:code/>标记用于显示当前 HTTP 状态代码,该<hs:cause/>标记用于显示来自导致错误的异常的消息。

于 2015-12-04T18:25:24.430 回答