响应对象Response
生活随笔
收集整理的這篇文章主要介紹了
响应对象Response
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.概念【響應(yīng)給瀏覽器】
- 響應(yīng)∶回饋結(jié)果。在B/S架構(gòu)中,就是服務(wù)器給客戶端瀏覽器反饋結(jié)果。
- 響應(yīng)對象∶就是在項(xiàng)目中用于發(fā)送響應(yīng)的對象。
- 實(shí)現(xiàn)接口:ServletResponse和HttpServletResponse【瀏覽器訪問服務(wù)器后,服務(wù)器給客戶端響應(yīng)的數(shù)據(jù)會封裝為ServletResponse對象,它有一個(gè)子類叫HttpServletResponse對象,用于封裝按照Http協(xié)議封裝的響應(yīng)數(shù)據(jù)。】
2.響應(yīng)狀態(tài)碼
3.字節(jié)/字符流響應(yīng)數(shù)據(jù)
字節(jié)流響應(yīng)數(shù)據(jù)【響應(yīng)給瀏覽器】
@WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//設(shè)置瀏覽器響應(yīng)編碼[html類型的文本,字符集為utf-8]resp.setContentType("text/html;charset=utf-8");//1.獲取字節(jié)流輸出對象ServletOutputStream os = resp.getOutputStream();//2.定義一個(gè)消息String str ="你好世界";//3.通過字節(jié)流對象輸出os.write(str.getBytes("utf-8"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }字符流響應(yīng)數(shù)據(jù)【響應(yīng)給瀏覽器】
@WebServlet("/ServletDemo2") public class ServletDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//設(shè)置瀏覽器響應(yīng)編碼[html類型的文本,字符集為utf-8]resp.setContentType("text/html;charset=utf-8");//獲取字符流輸出對象resp.getWriter().write("<h3>這是一個(gè)響應(yīng)信息</h3>");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }注:【字節(jié)流響應(yīng)數(shù)據(jù)無法換行,原因:字節(jié)流讀取1024個(gè)字節(jié),直接讀到結(jié)尾,然后在末尾寫入,相當(dāng)于換行符沒起到最用,可以采用字符流展示標(biāo)簽數(shù)據(jù)】
4.響應(yīng)圖片[圖片不需要設(shè)置編碼]
點(diǎn)擊超鏈接對應(yīng)ServletDemo3處理
<a href="/Response/ServletDemo3">點(diǎn)我看圖</a> //響應(yīng)圖片[圖片不需要設(shè)置編碼] @WebServlet("/ServletDemo3") public class ServletDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.創(chuàng)建字節(jié)輸入流對象,關(guān)聯(lián)讀取圖片路徑//首先獲取到關(guān)聯(lián)圖片的項(xiàng)目路徑[因?yàn)轫?xiàng)目發(fā)布后路徑會改變]String realPath = getServletContext().getRealPath("/img/nan.png");BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));//2.響應(yīng)對象獲取字節(jié)輸出流對象,展示關(guān)聯(lián)圖片ServletOutputStream os = resp.getOutputStream();byte[] bytes = new byte[1024];int len = bis.read(bytes);while (len!=-1){os.write(bytes,0,len);len = bis.read(bytes);}bis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }5.設(shè)置緩存時(shí)間
- 緩存:對于不經(jīng)常變化的數(shù)據(jù),我們可以設(shè)置合理緩存時(shí)間,以避免瀏覽器頻繁請求服務(wù)器。以此來提高效率
- 方法:setDateHeader(String name,long time)
6.設(shè)置定時(shí)刷新
//定時(shí)刷新 @WebServlet("/ServletDemo5") public class ServletDemo5 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//設(shè)置瀏覽器響應(yīng)編碼[html類型的文本,字符集為utf-8]resp.setContentType("text/html;charset=utf-8");//寫出顯示數(shù)據(jù)resp.getWriter().write("您的用戶名有誤,3秒回自動跳轉(zhuǎn)到登錄頁面");//定時(shí)刷新,跳回resp.setHeader("Refresh","3;url=/Response/html/index.html");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }7.重定向
//重定向a找b,b告訴a,c可以完成,a再找c a找了2次 @WebServlet("/ServletDemo6") public class ServletDemo6 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//設(shè)置瀏覽器響應(yīng)編碼[html類型的文本,字符集為utf-8]resp.setContentType("text/html;charset=utf-8");//方法1:設(shè)置重定向狀態(tài)碼/*resp.setStatus(302);resp.setHeader("location",req.getContextPath()+"/ServletDemo5"); *///方法2:resp.sendRedirect(req.getContextPath()+"/ServletDemo5");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }8.文件下載
點(diǎn)擊超鏈接對應(yīng)ServletDemo7處理
<a href="/Response/ServletDemo7">點(diǎn)我下載圖片</a> //文件下載 @WebServlet("/ServletDemo7") public class ServletDemo7 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.創(chuàng)建字節(jié)輸入流對象,關(guān)聯(lián)讀取的文件String realPath = getServletContext().getRealPath("/img/nan.png");BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));//2.設(shè)置響應(yīng)頭支持的類型/*Content-Type 消息頭名稱支持的類型application/octet-stream消息頭參數(shù)應(yīng)用的類型為字節(jié)流*/resp.setHeader("Content-Type","application/octet-stream");//3.設(shè)置響應(yīng)頭以下載方式打開附件/*Content-Disposition消息頭名稱 處理的形式attachment ;filename=hm.png消息頭參數(shù)附件形式進(jìn)行處理―指定下載文件的名稱*/resp.setHeader("Content-Disposition","attachment;filename=nan.png");//4.獲取字節(jié)輸出流對象ServletOutputStream os = resp.getOutputStream();//5.循環(huán)讀寫byte[] bytes = new byte[1024];int len = bis.read(bytes);while (len!=-1){os.write(bytes,0,len);len = bis.read(bytes);}//6.釋放資源bis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }總結(jié)
以上是生活随笔為你收集整理的响应对象Response的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何删除Mac电脑中的Cookies苹果
- 下一篇: Servlet请求和响应总结