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