Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么时候可以从Servlet抛出ServletException?_Java_Servlets - Fatal编程技术网

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
  • 使用抛出
    新请求异常(消息)
    的方法检查请求的有效性
  • 在servlet的
    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
    一样。我不知道这种行为是按规范还是按惯例。