ServletResponse的getOutputStream和getWriter
一直不明白,為什麼reponse得到的OutputStream和PrintWriter物件可以向瀏覽器(理解為一個檔案)輸出內容,而不是其他的檔案。
可以先理解為:ServletResponse(或者是HttpServletResponse)這個介面,當我們在Servlet中使用到時,Servlet引擎為我們建立了物件。引擎應該做了一些工作,使輸出檔案指向了瀏覽器。
下面看一些專業的介紹。
1,getOutputStream方法用於返回Servlet引擎建立的位元組輸出流物件,Servlet程式可以按位元組形式輸出響應正文。
2,getWriter方法用於返回Servlet引擎建立的字元輸出流物件,Servlet程式可以按字元形式輸出響應正文。
3,getOutputStream和getWriter這兩個方法互相排斥,呼叫了其中的任何一個方法後,就不能再呼叫另一方法。
4,getOutputStream方法返回的位元組輸出流物件的型別為ServletOutputStream,它可以直接輸出位元組陣列中的二進位制資料。
5,getWriter方法將Servlet引擎的資料緩衝區包裝成PrintWriter型別的字元輸出流物件後返回,PrintWriter物件可以直接輸出字元文字內容。
6,Servlet程式向ServletOutputStream或PrintWriter物件中寫入的資料將被Servlet引擎獲取,Servlet引擎將這些資料當作響應訊息的正文,然後再與響應狀態行和各響應頭組合後輸出到客戶端。
7,Serlvet的service方法結束後,Servlet引擎將檢查getWriter或getOutputStream方法返回的輸出流物件是否已經呼叫過close方法,如果沒有,Servlet引擎將呼叫close方法關閉該輸出流物件。