java servlet PrintWriter #flush stop thr Exception

问题描述 投票:0回答:1

我有以下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

但是在浏览器输出中我预计会出现NullPointerException。

当我发表评论flash()时

//writer.flush();

发生NullPointerException。

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

任何想法都会很高兴。谢谢。

java servlets flush
1个回答
1
投票

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

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

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

由于响应已提交,因此无法通知客户端有关错误的信息。但仍记录错误。

© www.soinside.com 2019 - 2024. All rights reserved.