簡體   English   中英

java servlet PrintWriter#flush停止引發異常

[英]java servlet PrintWriter#flush stop throwing 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 \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”文本。

任何想法都會很高興。 謝謝。

但是我不明白為什么這阻止了異常拋出

它不會“阻止”異常。 異常仍然發生。

但是,servlet容器通過對錯誤頁面進行httpServletResponse.sendError()調用或對requestDispatcher.forward()調用來處理異常,如果響應已經提交,則無法完成。

由於已提交響應,因此根本無法將錯誤通知客戶端。 該錯誤仍然記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM