java servlet PrintWriter#刷新停止引发异常
我有以下servlet代码: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
@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日志-是的,有例外。