Java 什么时候可以从Servlet抛出ServletException?
过去我一直在抛出Java 什么时候可以从Servlet抛出ServletException?,java,servlets,Java,Servlets,过去我一直在抛出ServletExceptions,当Servlet中出现问题时,大多数情况下只是将异常包装在ServletException中 现在我在想,实际上最好不要抛出一个ServletException,而是使用response.senderro(sc)响应并使用正确的HTTP状态代码 如果我不能使用response.sendError,(IOException)发送错误,我将IOException包装在ServletException中 以上是更好的回应方式吗? 什么时候可以抛出一个
ServletException
s,当Servlet中出现问题时,大多数情况下只是将异常包装在ServletException
中
现在我在想,实际上最好不要抛出一个ServletException
,而是使用response.senderro(sc)
响应并使用正确的HTTP状态代码
如果我不能使用response.sendError
,(IOException
)发送错误,我将IOException
包装在ServletException
中
以上是更好的回应方式吗?
什么时候可以抛出一个
ServletException
?最好抛出一个ServletException
稍后,您可以使用web.xml
中的error page指令捕获此异常,并执行适当的操作:向用户显示一个奇特的错误页面,将异常与堆栈跟踪一起发送给开发人员,将其写入日志,等等
如果只使用
sendError()
,则在不同程度上无法做到这一点。我刚刚得出了与@alamar相反的结论。我的情况是编写一个REST样式的servlet,由Oracle数据库中的代码调用,而不是由人工调用
当请求信息无效或丢失时,我想将HTTP代码400错误请求返回给调用方。抛出ServletException
会导致容器返回500个内部服务器错误,该错误表示服务器有问题,而不是请求有问题
这是我采用的解决方案
exception
的简单异常类RequestException
新请求异常(消息)
的方法检查请求的有效性doPost
方法中捕获RequestException
,然后调用HttpServletResponse.sendError()
,如下所示:
try {
validateRequest(request);
// Do stuff with a valid request.
} catch (RequestException e) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
}
消息返回给调用者,就像使用
ServletException
一样。我实际上忘记了这一点,过去我在网站上也做过同样的事情。目前,我正在使用servlet创建一个简单的XMLWeb服务,因此在该上下文中没有要显示的页面。谢谢你的提醒@阿拉玛,你能详细说明你的方法吗?也许发一些代码?我对stacktrace路由和写入日志的位特别好奇。IOException
导致容器返回的HTTP错误是什么?@ADTC一个快速实验表明,Tomcat 7对IOException
抛出500个内部服务器错误,就像对ServletException
一样。我不知道这种行为是按规范还是按惯例。