HTTP協議包含請求和響應部分。
HttpServletRequest就表明着請求部分
HttpServletResponse就表明着響應部分html
常見應用:web
一、文件下載(不知道怎麼貼代碼就不貼了)瀏覽器
通知客戶端如下載的方式打開
response.setHeader("Content-type", "text/html;application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=1.jpg");緩存
若是文件是中文名的話服務器
String path = getServletConfig().getServletContext().getRealPath("/美女.jpg");
//通知客戶端如下載的方式打開
String name = path.substring(path.lastIndexOf("\\")+1);
response.setHeader("Content-type", "text/html;application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(name, "utf-8")+"");併發
二、輸出中文數據app
字節流:
out.write("中文".getBytes("UTF-8"));有亂碼
解決辦法:
方式一:更改瀏覽器的查看編碼(不可取)
通知瀏覽器,使用的碼錶
方式二:response.setHeader("Content-Type", "text/html;charset=UTF-8");
方式三:response.getOutputStream().write("<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>".getBytes("UTF-8"));
*方式四:response.setContentType("text/html;charset=UTF-8");//方式2、3、四都是同樣的
字符流:
Servlet中的字符流默認查ISO-8859-1(SUN的Servlet規範要求的)
如何更改這個默認的編碼呢?response.setCharacterEncoding("UTF-8");
//不要忘記通知瀏覽器的編碼
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Type", "text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write(s);//默認查的是ISO-8859-1碼錶(SUN的Servlet規範要求的)
在字符流輸出中文數據時:response.setContentType("text/html;charset=UTF-8");
有兩個做用:通知字符流以UTF-8編碼輸出
通知客戶端以UTF-8解碼顯示ui
三、動態生成驗證碼編碼
四、控制緩存時間code
發送HTTP頭控制緩存時間
response.setDateHeader(「Expires」, System.currentTimeMillis()+1000*60*60);//緩存1小時
五、定時刷新
發送HTTP頭
response.setHeader("Refersh",1);//每隔一秒刷新本頁面
response.setHeader("Refersh",5;URL=1.html);//5秒鐘以後跳轉到1.html
六、請求重定向
經過response實現請求重定向。 請求重定向指:一個web資源收到客戶端請求後,通知客戶端去訪問另一個web資源,這稱之爲請求重定向。 地址欄會變,併發送2次 請求,增長服務器負擔 實現方式 response.sendRedirect() 實現原理: 302/307狀態碼和location頭便可實現重定向
七、細節
字節流和字符流不能同時使用,互斥的。 經過字符流或字節流輸出的數據並非直接打給瀏覽器的。而是把數據寫到response對象的緩存中的。服務器從緩存中取出數據,按照HTTP協議的響應格式輸出給瀏覽器。 若是你調用的response的輸出流沒有主動關閉,服務器會替你關的。