http響應用法詳解--response

目錄
    一、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

相關文章
相關標籤/搜索