过去,当Servlet中的某些内容出现错误时,我一直在抛出ServletException
,主要是在ServletException
中包含异常。
现在我认为最好不要抛出ServletException
,而是回复response.sendError(sc)
并使用正确的HTTP状态代码。
如果我无法使用reponse.sendError
(IOException
)发送错误,请将IOException
包裹在ServletException
中。
以上是更好的回应方式吗?
什么时候可以抛出ServletException
?
答案 0 :(得分:23)
我刚刚得出了与@alamar相反的结论。我的情况是编写一个REST样式的servlet,由Oracle数据库中的代码调用,而不是由人类调用。
当请求信息无效或缺失时,我想将HTTP代码 400 Bad Request 返回给调用者。抛出ServletException
会导致容器返回 500内部服务器错误,这表明服务器出现了问题,而不是请求。
这是我采用的解决方案。
RequestException
。Exception
new RequestException(message)
。在servlet的RequestException
方法中抓取doPost
,然后像这样调用HttpServletResponse.sendError()
:
try {
validateRequest(request);
// Do stuff with a valid request.
} catch (RequestException e) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
}
消息将返回给调用者,就像使用ServletException
一样。
答案 1 :(得分:9)
最好抛出ServletException
。
您稍后可以在web.xml
中使用error-page指令实际捕获此异常,并采取相应的操作:向用户显示一个奇特的错误页面,将异常连同堆栈跟踪一起发送给开发人员,将其写入日志等。
如果您只使用sendError()
,则无法在不同范围内执行此操作。