Java库将HTTP状态代码映射到描述?

我正处于为webapp编写自定义错误页面的情况(主要是为了减少servlet容器的默认错误页面中的信息泄露)。 由于每个错误状态代码都需要一个错误页面,因此我必须对每个代码都有一个明智的响应。 据我所知,这些错误页面不一定非常用户友好,但只是将所有内容重定向到单个“它出错”错误页面将使诊断问题变得非常困难。

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

所以我想知道是否有一个Java库可以提供HTTP状态代码和简短的人类可读描述之间的良好映射(理想情况下是一个2-4字的“摘要”,用作页面标题,以及在摘要中扩展的1-3句话消息)。

是的, Apache Commons HttpClient具有此function。 HttpStatus类具有与其他地方相同的int常量列表,但它还具有static String getStatusText(int)方法,该方法返回状态代码的可读描述。

这是Maven依赖:

  commons-httpclient commons-httpclient 3.1  

示例代码:

 import org.apache.commons.httpclient.HttpStatus; String responseMessage = HttpStatus.getStatusText(HttpStatus.SC_OK); System.out.println(responseMessage); 

打印:

 OK 

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

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

 httpResponse.getStatusLine().getReasonPhrase() 

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

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

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

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

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

例如:

 HttpStatus.SC_FORBIDDEN == 403 EnglishReasonPhraseCatalog.INSTANCE.getReason(403, Locale.ENGLISH) == "Forbidden" 

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

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

您可以使用我的HttpStatus JSP Tag Libray :

 <%@ page isErrorPage="true" %> <%@ taglib prefix="hs" uri="http://erik.thauvin.net/taglibs/httpstatus" %>  <hs:code></hs:code> <hs:reason default="Server Error"></hs:reason>  

Cause:

具体来说,如上例所示, 标记用于显示页面标题和第一个标题中当前HTTP状态代码的原因短语( 人类可读描述 )。

此外, 标记用于显示当前的HTTP状态代码, 标记用于显示导致错误的exception消息。