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的主要内容,如果未能解决你的问题,请参考以下文章