目錄
一、response類型
二、響應格式
三、狀態碼
四、響應頭
五、響應體
六、快捷的重定向
------------------------------------------------------------------------------------------------
服務器處理請求的流程:
服務器每次收到請求時,都會爲這個請求開闢一個新的線程,而後把客戶端的請求數據封裝到request對象中,
服務器還會建立response對象,這個對象與客戶端鏈接在一塊兒,它能夠用來向客戶端發送響應。
------------------------------------------------------------------------------------------------
responsehtml
一、response類型:HttpServletResponse
ServletResponse-->與協議無關的類型
HttpServletResponse-->與http協議相關的類型java
二、響應格式
---------------------------------------------------------------------------------------
| * 響應首行
| * 響應頭
| * 空行
| * 響應體(或稱之爲響應正文)
---------------------------------------------------------------------------------------
截取信息:
--------------------- 響應信息以下 -------------------------------------------------------
| HTTP/1.1 200 OK [響應首行]
| Server: Apache-Coyote/1.1
| Content-Type: text/html;charset=UTF-8
| Content-Length: 724
| Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
| Date: Wed, 25 Sep 2012 04:15:03 GMT
| [描述:這是空行]
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> [描述:如下都是響應體]
| <html>
| <head>
| <base href="http://localhost:8080/hello/">
|
| <title>My JSP 'index.jsp' starting page</title>
| <meta http-equiv="pragma" content="no-cache">
| <meta http-equiv="cache-control" content="no-cache">
| <meta http-equiv="expires" content="0">
| <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
| <meta http-equiv="description" content="This is my page">
| </head>
|
| <body>
| <form action="" method="post">
| 關鍵字:<input type="text" name="keyword"/>
| <input type="submit" value="提交"/>
| </form>
| </body>
| </html>
--------------------- 響應信息結束 ------------------------------------------------------數組
三、狀態碼
200表示成功、302表示重定向、404表示客戶端錯(訪問的資源不存在)、500表示服務器端錯
> sendError(int sc) --> 發送錯誤狀態碼,例如40四、500
> sendError(int sc, String msg) --> 也是發送錯誤狀態碼,還能夠帶一個錯誤信息!
> setStatus(int sc) --> 發送成功的狀態碼,能夠用來發送302
例如:response.setStatus(302);
案例:發送404錯誤。
例如:response.sendError(404,"資源找不到");瀏覽器
四、響應頭
Content-Type、Refresh、Location等等.
頭就是一個鍵值對!可能會存在一個頭(一個頭名,一個頭值),也可能存在一個頭(一個頭名,多個頭值!)
> setHeader(String name, String value):適用於單值的響應頭,(經常使用!)
response.setHeader("aaa", "AAA");
> addHeader(String name, String value):適用於多值的響應頭(瞭解)
response.addHeader("aaa", "A");
response.addHeader("aaa", "AA");
> setIntHeader(String name, int value):適用於單值的int類型的響應頭(瞭解)
` response.setIntHeader("Content-Length", 888);
> setDateHeader(String name, long value):適用於單值的毫秒類型的響應頭(瞭解)
response.setDateHeader("expires", 1000 * 60 * 60 * 24);
案例:
> 重定向:發送302,設置Location頭!
response.sendStatus(302);
response.setHeader("Location", "/day10_1/CServlet");
> 定時刷新:設置Refresh頭,你能夠把它理解成,定時重定向!
response.setHeader("Refresh", "5;URL=/day10_1/EServlet");//5秒後跳轉到新url地址。
> 禁用瀏覽器緩存:Cache-Control、pragma、expires (這三個加起來對全部瀏覽器都兼容)
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", -1);
> <meta>標籤能夠代替響應頭:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">緩存
五、響應體
一般是html、也能夠是圖片!
response的兩個流:
* PrintWriter,用來向客戶端發送字符數據!須要設置編碼。
PrintWriter writer = response.getWriter();
* ServletOutputStream,用來向客戶端發送字節數據。
ServletOutputStream out = resopnse.getOutputStream();
注意:兩個流不能同時使用!!服務器
案例:
* 使用PrintWriter發送字符數據
response.getWriter().print("使用PrintWriter發送字符數據!");
* 使用ServletOutputStream發送字節數據(圖片),// 把一張圖片讀取到字節數組中
FileInputStream in = new FileInputStream("F:/F/白冰.jpg");
byte[] bytes = IOUtils.toByteArray(in);//讀取輸入流內容的字節到字節數組中。
response.getOutputStream().write(bytes);jsp
六、快捷的重定向
(1)重定向:發送302,設置Location頭!
response.sendStatus(302);
response.setHeader("Location", "/day10_1/CServlet");
(2)快捷的重定向:
設置302狀態碼、Location頭!其中變化的只有Location頭,因此java提供了一個快捷方法,完成重定向!
* sendRedirect(String location)方法
例如:response.sendRedirect("/day10_1/CServlet"); //重定向到"/day10_1/CServlet"
--------------------- post