我從以前就一直覺得很奇怪,為何要對HttpServletResponse物件,
寫入給http response本身的訊息時,要從HttpServletResponse物件調用getWriter方法
然後透過PrintWriter物件寫入回傳訊息。
而非直接寫入HttpServletResponse物件?例如HttpServletResponse物件提供了
一些setXXX方法,例如setContentType、setHeader、setCacheControl......
來直接寫入訊息到HttpServletResponse物件。既然可以有這些setXXX方法
那麼為何要將主要回傳訊息寫入HttpServletResponse物件,要用的是getWriter方法?
我目前的理解是:
因為HttpServletResponse物件跟http response本身,兩者是關聯的,
既然兩者有關連,那麼若是HttpServletResponse物件提供某些類別/介面,
由於
介面與HttpServletResponse物件、HttpServletResponse物件跟http response的關聯,
所以,外部的訊息就可藉由使用這些類別/介面,將外部訊息寫入http response本身。
因此,只要HttpServletResponse物件提供某些類別/介面,
即可讓外部程式將訊息寫入http response本身。
所以,HttpServletResponse物件具備了某些類別/介面,可透過getXXX方法將其取出,
這個getXXX方法,就是getWriter方法、getOutputStream方法。
透過getWriter方法取出的介面,經過實例化後成為PrintWriter物件,
這時若要將外部訊息寫入http response本身,就只要將該訊息寫入PrintWriter物件。
即可透過上面所述的關聯性,將該訊息寫入http response本身。
而透過此法將外部訊息寫入http response本身,原理和一開始所以提到的那些
setXXX方法不同,而是先要取得介面才行,難怪明明是要寫入(set)訊息,卻是要先
getWriter、getOutputStream。
希望這樣理解沒有錯誤,有錯的話麻煩鞭小力一點= =