为了账号安全,请及时绑定邮箱和手机立即绑定

java servlet PrintWriter#flush stop throwing

java servlet PrintWriter#flush stop throwing

红颜莎娜 2022-09-07 21:34:09
我有一个令人着迷的 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 1MyServlet::doGet 2浏览器输出为:Some text 1Some text 2但是在浏览器输出中,我期望NullPointerException。当我评论flash()调用时//writer.flush();发生 NullPointerException。我知道 flush() 调用会立即将内容刷新到响应并提交响应。但我不明白为什么这会阻止异常抛出,因为同时“一些文本2”和“MyServlet::d oGet 2”文本开始输出。会很高兴有任何想法。谢谢。
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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

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

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

由于响应已提交,因此根本无法向客户端发出有关错误的通知。但是,错误仍然会记录下来。


查看完整回答
反对 回复 2022-09-07
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信