当前位置: 首页 > 知识库问答 >
问题:

如何访问Tomcat错误页面中的HTTP响应文本

索和璧
2023-03-14

我正在使用Tomcat 6(但同样适用于Tomcat 7)。假设我的 web.xml 包含以下定义:

<error-page>
    <error-code>401</error-code>
    <location>/Handle401Error.jsp</location>
</error-page>

假设我现在从其他servlet/JSP返回HTTP 401:

httpResponse.sendError(SC_UNAUTHORIZED, "This is a message");

如何访问Handle401Error.jsp中的HTTP响应文本("这是一条消息")?Tomcat这样做的方式,当它显示这样的错误页面时

是通过使用 Valve (ErrorReportValve)。我也需要编写阀门吗?

编辑:下面接受的答案正是我一直在寻找的,这个问题的假设重复没有提到相同的解决方案。

共有1个答案

松铭
2023-03-14

Tomcat将消息字符串存储在内部类org.apache.coyote.Response中。

没有标准的方式来访问消息:从 HttpServletResponse#sendError(int,String) 的 javadoc:

如果已为与传入的状态代码相对应的Web应用程序进行了错误页面声明,它将优先于建议的msg参数返回,并且msg参数将被忽略。

糟糕的API设计。

作为解决方法,您可以将错误消息作为属性放入请求中,只需调用响应即可。sendError(401),并在错误页面中从请求属性中提取消息:

在您的代码中:

HttpServletRequest request = ...
HttpServletResponse response = ...
request.setAttribute("myerrormessage", "This is a message");
response.sendError(401);

在您的错误 jsp 页面中:

Message <%=request.getAttribute("myerrormessage")%>    
 类似资料:
  • 我正在使用Quarkus框架与瑞思轻松进行 REST 通信。当响应代码为200等时,一切都很好。当客户端收到错误代码时,例如 400 错误请求 resteasy 返回 Web 应用程序异常,我无法访问响应正文。 我的服务.java 我一直在尝试从WebApplication ationException读取实体,但实体始终为空。在Postman服务中,返回如下正文:

  • 我想将我的异常从我的“数据库”REST API重新抛出到我的“后端”REST API,但我丢失了原始异常的消息。 这是我通过Postman从我的“数据库”REST API中得到的: 这部分没问题。 这是我通过Postman从我的“后端”REST API得到的: 如您所见,原来的“message”字段丢失了。 我使用: Spring boot 2.2.5.发布 spring-boot-starter

  • 是否可以在不将此请求发送到服务器的情况下截获通过Charles的请求并立即返回500个错误代码? 找不到这方面的任何信息。所有资源建议等待响应,然后将HTTP响应代码更改为500。

  • 我有一个REST服务,它暴露在iPhone和Android客户端上。目前我遵循HTTP代码200、400、401、403、404、409、500等。 还是通过JSON将其放在响应体中更好?

  • 这就是我得到的错误 2017/02/21 14:23:31 error-jmeter.util.BeanShellInterpreter:调用bsh方法时出错:eval源文件:内联计算:字符串行的内联计算;串[]字;line=sampleResult.getResponseMessage();log.inf。..“:尝试解析未定义变量或类名:SampleResult上的方法:getResponse