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