1. 程式人生 > >Response響應正文

Response響應正文

Response響應正文,requestresponse就像一對不分家的小情侶,總是成對的出現。今天就詳細解釋requestresponse到底是什麼。

Response是一個Servlet.Service();方法的一個引數,型別是javax.Servlet.http.HttpServletResponse.

當瀏覽器傳送一個請求,當伺服器接受之後,就會建立一個requestresponse物件,然後把請求傳送的資料封裝到request物件中,然後把這兩個物件都會傳遞給Service()方法,(//這個相當於把資料封裝到一個容器中,而request物件就是這個容器,Service方法是可以直接從容器中把資料取出來的)還可以使用response

響應給客戶端,response中有響應流(分為字元和位元組兩種),下圖為整個流程:

注:requestresponse都是一次性的,每次請求都會建立新的。並且由於資源的共享,前一次的訪問會影響下一次的訪問,所以說這個資源的共享是有風險的。

一:Response的功能:

1:設定響應頭;

2:設定狀態碼;

3:設定響應題(響應正文);

4:重定向(這個一般用的不多);

二:Response的響應正文:

Response的響應流總共有兩個,一個是,PrintWriter out = response.getWriter();//獲取字元響應流。

另外一個是ServletOutputStream out = response.getOutputStream()//

獲取位元組響應流。

注意,對於一個response而言,這個兩個響應流只能用其中的一個,否則會產生java.lang.IllegalStateException異常,(該異常表示,當前對客戶端的響應已經結束,不能在響應已經結束(或說消亡)後再向客戶端(實際上是緩衝區)輸出任何內容)。

提到字元流,首先涉及到兩個問題。

1:字元編碼。只有瀏覽器和客戶端使用同一種編碼方式,才不會產生亂碼,iso-8859-1不支援中文,GBK支援繁體中文。Gb2312支援簡體中文,世界通用的編碼是UTF-8,使用的範圍廣。2:緩衝區。快取區的資料通過流的形式來向硬碟上進行儲存的過程,由於快取區的大小是固定的一般大小為8K,(注意,Tomcat的實現方式可能有電不同,內部是response巢狀的方式,所以這個資料並不是8k,而是16k),然而資料的大小是不固定的,所以資料的大小並不一定是快取區大小的整數倍,但是當快取區的資料沒有大小沒有超過8K的時候,資料都是存放在緩衝區而不會立即傳送到客戶端,當Servlet執行結束後,伺服器才會去重新整理流,它是不會在自動的把體內的資料重新整理到硬碟或者客戶端瀏覽器上的,此時這就需要程式設計師進行手動的操作,提醒快取區即使沒有存滿資料,也應該把僅有的資料搬運走,這個操作稱為重新整理,也就是response.getWriter.flush()方法,或者是response.flushBuffer();
所以為了防止資料的流失,重新整理的作用是非常重要的。它會把一些在緩衝區沒有寫入到記憶體的資料強制輸出,並且把快取區清空。
三:設定響應頭
可以使用response的setHeader()方法來設定響應頭,並且該響應頭最終會發送給客戶端瀏覽器。Response.setHeader(“context-Type”,”text/html;charest = utf-8”);
Response.setHeader(“refresh”,”5;URL = Http://www.itcast.cn”);5秒後跳轉到傳智播客的主頁。