java servlet PrintWriter#刷新停止引发异常

java servlet PrintWriter#刷新停止引发异常,java,servlets,flush,Java,Servlets,Flush,我有以下servlet代码: @WebServlet("/my") public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet::doGe

我有以下servlet代码:

@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet::doGet 1");
        PrintWriter writer = resp.getWriter();
        writer.write("Some text 1 \n");
        writer.flush();
        writer.write("Some text 1 \n");
        System.out.println("MyServlet::doGet 2");
        throw new NullPointerException();
    }
}
日志输出为:

MyServlet::doGet 1
MyServlet::doGet 2
Some text 1
Some text 2
浏览器输出为:

MyServlet::doGet 1
MyServlet::doGet 2
Some text 1
Some text 2
但在浏览器输出中,我预期会出现NullPointerException

当我评论flash()调用时

出现NullPointerException

我知道flush()调用会立即将内容刷新到响应,也会提交响应。但我不明白为什么这会阻止异常抛出,因为同时“sometext2”和“MyServlet::doget2”文本被输出

我很乐意接受任何意见。 谢谢

但我不明白为什么这会阻止异常抛出

它不会“阻止”异常。例外情况仍然存在

但是,servlet容器通过对错误页面执行
requestDispatcher.forward()
调用或
httpServletResponse.sendError()
调用来处理异常,如果已提交响应,则无法执行此操作


由于响应已提交,因此无法将错误通知客户端。但仍会记录错误。

非常感谢您的回答。我知道了。我检查了tomcat日志-是的,有例外。