Response.getWriter().write() 與 JSP 中 out.print() 有什麼區別?


1. 問題

  • Response.getWriter().write() 與 JSP 中 out.print() 有什麼區別?

2. 解答

1. write() 和 print() 方法的區別

  • write():僅支持輸出字符類型數據,如:字符、字符數組、字符串等。
  • print()/println():可以將各種類型(包括 Object)的數據通過默認編碼轉換成 bytes 字節形式,這些字節都通過 write(int c) 方法被輸出。

2. Response.getWriter() 和 JSP 中 out 的區別

  • Response.getWriter 和 JSP 中 out 的類不一樣:
    • Response.getWriter 是 java.io.PrintWriter,PrintWriter 是一個繼承了 Writer 的普通類;
    • out 是 JspWriter,JspWriter 是一個抽象類。
  • 執行原理不同:JspWriter 相當於一個帶緩存功能的 PrintWriter,它不是直接將數據輸出到頁面,而是將數據刷新到 Response 的緩衝區後再輸出。也就是說,out 對象實際上是對 PrintWriter 有依賴的,他需要先將要輸出的內容存到 Response 的緩衝區裏面, 然後等待 JSP 頁面中的 out 滿足一定條件之後,纔會調用輸出的方法把內容直接輸出到頁面上。換句話說,getWriter() 方法的執行結果,總是優先於 out 對象。
    • Response.getWriter.print 直接輸出數據
    • out.print 只能在其後輸出
  • out 爲 JSP 的內置對象,刷新 JSP 頁面,自動初始化獲得 out 對象,所以使用 out 對象是需要刷新頁面的;而 Response.getWriter() 響應信息通過 out 對象輸出到網頁上,當響應結束時它自動被關閉,與 JSP 頁面無關,無需刷新頁面。
  • out 的 print() 方法和 println() 方法在緩衝區溢出並且沒有自動刷新時候會產生 IOException;而 Response.getWrite() 方法的 print 和 println 中都是抑制 IOException 異常的,因此不會有 IOException。

3. Response.getWriter().write() 與 JSP 中 out.print() 的其他區別

  • out.println(); 方法也不能直接頁面佈局換行,只能用 HTML 代碼換行,例如:out.println("</br>");

原文鏈接:https://qwert.blog.csdn.net/article/details/105608123

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章