我想通了,这样做的一种方式。我不确定它是最好的还是最简单的,但它的工作原理。我发现了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}"/>"}
你会注意到在我手动响应代码设置为500。
这给了我一个新的问题,3号线:异常不记录任何更多。由于上述Struts的指南建议,我解决了这个通过添加struts.xml
下面我<package>
还有:
<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让解决方案变得如此呆板。
客户端库是ExtJS,但没关系。服务器是什么问题。当服务器端出现未处理的异常时,Struts会发送一个HTML错误报告和一个“200 OK”状态码,这就是我想要解决的问题。我可以处理的HTML,但Struts必须能够在错误发生时发送代码500,而不是代码200.谢谢! – curtisdf 2012-03-14 18:56:52
'WebApplicationException()'导致HTTP 500错误代码。你试过扔这个吗? – tusar 2012-03-14 19:03:37
在服务器端,我想避免在任何地方插入try/catch块。我只需要一些可以告诉Struts的配置,“做正确的事(tm),并且在发送这些愚蠢的问题报告时给我一个500响应代码。” – curtisdf 2012-03-14 19:04:59