JSP中out.println()與response.getWriter().println()輸出的區別
阿新 • • 發佈:2018-12-25
首先說明兩者的主要區別(加*為重點)
*1.兩者的類不同,out的類是JspWriter,response.getWriter()的類是PrintWriter。
*2.out是JSP的內建物件,直接就可以呼叫裡面的方法,而PrintWriter呼叫之前需要response.getWriter()獲取物件。
3. JspWriter的print()方法會丟擲IOException,而PrintWriter則不會 。
4. JspWriter和PrintWriter都繼承自Java.io.Writer,但前者是抽象類**,而後者卻不是。
**5.最主要的區別:
在同一個jsp或servlet檔案中同時使用到了JspWriter
演示如下
<%@ page language="java" import="java.io.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setContentType("text/html;charset=utf-8");//設定響應的內容型別以及編碼方式
out.print("out輸出");
out.println("<br>");//輸出回車
response.getWriter ().println("PrintWriter輸出");
%>
結果為
顯然out的輸出方式被“插隊”了,這是為什麼呢?
這是因為,out物件是JspWriter類的一個例項,這個類的幕後其實還是PrintWriter類,
只是JspWriter具有快取,只有它的快取重新整理了後才會建立PrintWriter類,
並將JspWriter物件中的內容寫入到PrintWriter類物件中。
自己的理解是這相當於JspWriter只是個代購,在收到錢之後,他不是馬上就把貨給你,而是滿足他的條件後,再去PrintWriter的店取貨然後把貨給你。
只有滿足以下任一條件時,out物件才去呼叫getWriter()方法,通過PrintWriter
1. 設定page指令將“buffer”屬性為“none” 。
2. 寫入到out物件中的內容充滿了out物件的緩衝區。
3. 整個JSP頁面執行完畢。
如果想讓out的輸出直接輸出出來,重新整理out的緩衝區即可,即修改jsp程式碼為:
<%@ page language="java" import="java.io.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
response.setContentType("text/html;charset=utf-8");//設定響應的內容型別以及編碼方式
out.print("out輸出");
out.println("<br>");//輸出回車
out.flush();//輸出緩衝區
response.getWriter().println("PrintWriter輸出");
%>
現在可以得到out輸出在前面的結果了