中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
response詳解

 

 

1 response概述

responseServlet.service方法的一個(gè)參數(shù),類型為javax.servlet.http.HttpServletResponse。在客戶端發(fā)出每個(gè)請求時(shí),服務(wù)器都會(huì)創(chuàng)建一個(gè)response對象,并傳入給Servlet.service()方法。response對象是用來對客戶端進(jìn)行響應(yīng)的,這說明在service()方法中使用response對象可以完成對客戶端的響應(yīng)工作。

response對象的功能分為以下四種:

l 設(shè)置響應(yīng)頭信息;

l 發(fā)送狀態(tài)碼;

l 設(shè)置響應(yīng)正文;

l 重定向;

 

2response響應(yīng)正文

response是響應(yīng)對象,向客戶端輸出響應(yīng)正文(響應(yīng)體)可以使用response的響應(yīng)流,repsonse一共提供了兩個(gè)響應(yīng)流對象:

l PrintWriter out = response.getWriter():獲取字符流;

l ServletOutputStream out = response.getOutputStream():獲取字節(jié)流;

 

當(dāng)然,如果響應(yīng)正文內(nèi)容為字符,那么使用response.getWriter(),如果響應(yīng)內(nèi)容是字節(jié),例如下載時(shí),那么可以使用response.getOutputStream()。

注意,在一個(gè)請求中,不能同時(shí)使用這兩個(gè)流!也就是說,要么你使用repsonse.getWriter(),要么使用response.getOutputStream(),但不能同時(shí)使用這兩個(gè)流。不然會(huì)拋出IllegalStateException異常。

 

2.1 字符響應(yīng)流

l 字符編碼

在使用response.getWriter()時(shí)需要注意默認(rèn)字符編碼為ISO-8859-1,如果希望設(shè)置字符流的字符編碼為utf-8,可以使用response.setCharaceterEncoding(“utf-8”)來設(shè)置。這樣可以保證輸出給客戶端的字符都是使用UTF-8編碼的!

但客戶端瀏覽器并不知道響應(yīng)數(shù)據(jù)是什么編碼的!如果希望通知客戶端使用UTF-8來解讀響應(yīng)數(shù)據(jù),那么還是使用response.setContentType("text/html;charset=utf-8")方法比較好,因?yàn)檫@個(gè)方法不只會(huì)調(diào)用response.setCharaceterEncoding(“utf-8”),還會(huì)設(shè)置content-type響應(yīng)頭,客戶端瀏覽器會(huì)使用content-type頭來解讀響應(yīng)數(shù)據(jù)。

 

l 緩沖區(qū)

response.getWriter()PrintWriter類型,所以它有緩沖區(qū),緩沖區(qū)的默認(rèn)大小為8KB。也就是說,在響應(yīng)數(shù)據(jù)沒有輸出8KB之前,數(shù)據(jù)都是存放在緩沖區(qū)中,而不會(huì)立刻發(fā)送到客戶端。當(dāng)Servlet執(zhí)行結(jié)束后,服務(wù)器才會(huì)去刷新流,使緩沖區(qū)中的數(shù)據(jù)發(fā)送到客戶端。

如果希望響應(yīng)數(shù)據(jù)馬上發(fā)送給客戶端:

? 向流中寫入大于8KB的數(shù)據(jù);

? 調(diào)用response.flushBuffer()方法來手動(dòng)刷新緩沖區(qū);

 

3 設(shè)置響應(yīng)頭信息

  可以使用response對象的setHeader()方法來設(shè)置響應(yīng)頭!使用該方法設(shè)置的響應(yīng)頭最終會(huì)發(fā)送給客戶端瀏覽器!

l response.setHeader(“content-type”, “text/html;charset=utf-8”):設(shè)置content-type響應(yīng)頭,該頭的作用是告訴瀏覽器響應(yīng)內(nèi)容為html類型,編碼為utf-8。而且同時(shí)會(huì)設(shè)置response的字符流編碼為utf-8,即response.setCharaceterEncoding(“utf-8”);

l response.setHeader("Refresh","5; URL=http://www.itcast.cn"):5秒后自動(dòng)跳轉(zhuǎn)到傳智主頁。

 

4 設(shè)置狀態(tài)碼及其他方法

l response.setContentType("text/html;charset=utf-8"):等同與調(diào)用response.setHeader(“content-type”, “text/html;charset=utf-8”);

l response.setCharacterEncoding(“utf-8”):設(shè)置字符響應(yīng)流的字符編碼為utf-8; 

l response.setStatus(200):設(shè)置狀態(tài)碼;

l response.sendError(404, “您要查找的資源不存在”):當(dāng)發(fā)送錯(cuò)誤狀態(tài)碼時(shí),Tomcat會(huì)跳轉(zhuǎn)到固定的錯(cuò)誤頁面去,但可以顯示錯(cuò)誤信息。

 

5 重定向

5.1 什么是重定向

當(dāng)你訪問http://www.sun.com時(shí),你會(huì)發(fā)現(xiàn)瀏覽器地址欄中的URL會(huì)變成http://www.oracle.com/us/sun/index.htm,這就是重定向了。

重定向是服務(wù)器通知瀏覽器去訪問另一個(gè)地址,即再發(fā)出另一個(gè)請求。

 

5.2 完成重定向

響應(yīng)碼為200表示響應(yīng)成功,而響應(yīng)碼為302表示重定向。所以完成重定向的第一步就是設(shè)置響應(yīng)碼為302。

因?yàn)橹囟ㄏ蚴峭ㄖ獮g覽器再第二個(gè)請求,所以瀏覽器需要知道第二個(gè)請求的URL,所以完成重定向的第二步是設(shè)置Location頭,指定第二個(gè)請求的URL地址。

 

public class AServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setStatus(302);

response.setHeader("Location""http://www.itcast.cn");

}

}

 

  上面代碼的作用是:當(dāng)訪問AServlet后,會(huì)通知瀏覽器重定向到傳智主頁。客戶端瀏覽器解析到響應(yīng)碼為302后,就知道服務(wù)器讓它重定向,所以它會(huì)馬上獲取響應(yīng)頭Location,然發(fā)出第二個(gè)請求。

 

5.3 便捷的重定向方式

public class AServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.sendRedirect("http://www.itcast.cn");

}

}

 

response.sendRedirect()方法會(huì)設(shè)置響應(yīng)頭為302,以設(shè)置Location響應(yīng)頭。

如果要重定向的URL是在同一個(gè)服務(wù)器內(nèi),那么可以使用相對路徑,例如:

public class AServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.sendRedirect("/hello/BServlet");

}

}

 

重定向的URL地址為:http://localhost:8080/hello/BServlet。

 

5.4 重定向小結(jié)

l 重定向是兩次請求;

l 重定向的URL可以是其他應(yīng)用,不局限于當(dāng)前應(yīng)用;

l 重定向的響應(yīng)頭為302,并且必須要有Location響應(yīng)頭;

l 重定向就不要再使用response.getWriter()response.getOutputStream()輸出數(shù)據(jù),不然可能會(huì)出現(xiàn)異常;

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ServletContext對象
JavaWeb--編碼問題
HttpServletRequest與HttpServletResponse的實(shí)現(xiàn)類
java中Cookie被禁用后Session追蹤問題
【JavaWeb】90:response響應(yīng)
JavaWeb學(xué)習(xí)篇之
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服