gpt4 book ai didi

struts - 引发异常时,使 Struts 发送 500 内部服务器错误

转载 作者:行者123 更新时间:2023-12-04 08:28:07 28 4
gpt4 key购买 nike

我正在开发一个支持 AJAX 的 JavaScript 前端,它可以调用用 Struts 编写的 Java 后端。我的问题是,当后端抛出异常时,客户端仍然会看到“200 OK”HTTP 响应代码,而不是像人们期望的那样“500 Internal Server Error”。

这让我一再绊倒,因为我的第 3 方客户端 JavaScript 库依赖于 HTTP 状态代码来确定 AJAX 调用是否有问题,就像大多数现代库通常所做的那样。直到我的代码尝试解析通常是 JSON 的内容时,错误才会被检测到。

我真的很想避免攻击我的客户端 JS 库,以便优雅地处理这些错误。那么,当后端出现未处理的异常时,如何让 Struts 给我一个 500 状态代码?这不应该是 Struts 的默认行为吗?

编辑:在这种情况下,客户端代码无关紧要。我需要修复服务器,以便在发生未处理的异常时发送适当的状态代码。谢谢!

最佳答案

我想出了一种方法来做到这一点。我不确定它是最好的还是最简单的,但它确实有效。我找到了 Struts Exception Configuration guide并将以下内容添加到我的 <package>struts.xml :

<global-results>
<result name="exception">/exception.jsp</result>
</global-results>

<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="exception" />
</global-exception-mappings>

这会导致所有未处理的异常被重定向到 /exception.jsp .这是 JSP 的内容:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="application/json; charset=UTF-8" %>
<% response.setStatus(500); %>
{"success": false,"errors": "<s:property value="%{exception.message}"/>"}

您会在第 3 行注意到我手动将响应代码设置为 500。

这给了我一个新问题:不再记录异常。正如前面提到的 Struts 指南中所建议的,我通过将以下内容添加到我的 <package> 中解决了这个问题。在 struts.xml还有:
<interceptors>
<interceptor-stack name="appDefaultStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>

<default-interceptor-ref name="appDefaultStack" />

Struts:-1 使这样一个简单而明显的特性不是默认的,另一个 -1 使解决方案变得如此迟钝。

关于struts - 引发异常时,使 Struts 发送 500 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675507/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com