java servlet PrintWriter #flush stop thr Exception

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java servlet PrintWriter #flush stop thr Exception相关的知识,希望对你有一定的参考价值。

我有以下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 
");
        writer.flush();
        writer.write("Some text 1 
");
        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”文本出现了输出。

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

答案

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

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

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

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

以上是关于java servlet PrintWriter #flush stop thr Exception的主要内容,如果未能解决你的问题,请参考以下文章

Servlet学习总结

Java Web笔记之Servlet

使用Servlet上传多张图片——Servlet层(ProductServlet.java)

Java基础Servlet技术

java接收数据接口

java验证码学习一