java程序員第十課 javaweb之request&response

1、昨天內容回顧

2、servlet裏面兩個對象

客戶端每次發送http請求時候,服務器會爲每次的請求創建一個對象request,同時也會創建一個resposne對象作爲響應

3、response對象的介紹
* 名稱:HttpServletResponse:作爲客戶端響應
* HttpServletResponse是一個接口,父接口是 ServletResponse

* 常用的方法
    在http協議裏面,分爲三部分
    1、響應行
        ** 設置狀態碼 setStatus(int sc) 

    2、響應頭
        可以是一個key對應一個value,一個key對應多個value

        ** 設置頭:setHeader(java.lang.String name, java.lang.String value)
            - 一個key對應一個value
            - 比如:
                setHeader("aa","100");
                setHeader("aa","101");
                結果:101
            ** 針對不同的類型提供了方法
            - setIntHeader(java.lang.String name, int value) 
            - setDateHeader(java.lang.String name, long date) :值是一個毫秒數


        ** 設置頭:addHeader(java.lang.String name, java.lang.String value)
            - 一個key對應多個value
            - 比如:
                addHeader("bb","200");
                addHeader("bb","201");
                結果:bb:200,201
            ** 針對不同的類型提供了方法
            - addIntHeader(java.lang.String name, int value) 
            - addDateHeader(java.lang.String name, long date) :值是一個毫秒數

    3、響應體
        ** 在頁面顯示的內容
        getWriter(): 使用字符流
        getOutputStream():使用字節流

***案例
   ** 從服務器上拿到的數據顯示在頁面上,這些操作都可以使用response實現

4、案例一:使用response實現登錄的重定向
* 有一個登錄頁面
** 有表單,有輸入項(用戶名和密碼)
** 提交按鈕
* 有一個servlet來處理登錄操作
** 輸入正確的用戶名和密碼,直接在頁面輸出一個 登錄成功
** 用戶名或者密碼錯誤,重定向到登錄頁面

    1、接受到傳遞過來的用戶名和密碼
        ** request.getParameter();

    2、判斷用戶名和密碼是否正確(admin  123456)
    3、如果正確,直接在頁面輸出 登錄成功
    4、如果錯誤,重定向到登錄頁面

* //設置狀態碼 302
response.setStatus(302);
//重定向到登錄頁面  使用頭  Location
response.setHeader("Location", "/day10/response/login.html");

5、案例二:使用response實現頁面的定時跳轉(控制秒數)
* 使用頭 Refresh
* servlet寫法:response.setHeader(“Refresh”, “5;url=/day10/response/login.html”);
* 在頁面中寫法:在頭標籤head標籤裏面,
* 想要實現控制秒數,使用js操作
- var m = 5;
function change1() {
//alert(‘1’);
//獲取到span
var span1 = document.getElementById(“spanid”);
//使用innerHTML寫入到span裏面
span1.innerHTML = m;
m–;
}
//實現定時實現
setInterval(“change1();”,1000);

6、案例三:使用response實現禁用瀏覽器緩存
** 禁用瀏覽器緩存可以保證每次數據都是最新的(數據是不斷變化)
- 比如 網銀
** 使用三個頭信息
Cache-Control : no-cache
Pragma : no-cache
Expires: -1
** 獲取當前時間:
- Date date = new Date();
date.toLocaleString();
** 如果在一些版本(ie6)的瀏覽器中出現了數據不能變化,這個時候出現了緩存,可以禁用瀏覽器緩存
- //禁用瀏覽器緩存
//Cache-Control : no-cache
response.setHeader(“Cache-Control”, “no-cache”);
//Pragma : no-cache
response.setHeader(“Pragma”, “no-cache”);
//Expires: -1:固定寫法
** Expires頭時候,值是一個毫秒數,固定寫法 -1
response.setDateHeader(“Expires”, -1);

7、response向頁面輸出中文的亂碼問題

* getOutputStream():使用字節流:處理中文亂碼的方式
    * 使用這種方式輸出中文,不一定會有問題
    * 設置瀏覽器的編碼和字節數組的編碼一致

    * 設置瀏覽器的編碼:response.setHeader("Content-Type", "text/html;charset=utf-8");
    * 設置字節數組的編碼:response.getOutputStream().write("字節流中文測試".getBytes("utf-8"));

* getWriter(): 使用字符流:處理中文亂碼的問題
    * 使用這種方式,輸出中文一定會有問題
        ** 數據是放在response緩衝區裏面,默認編碼 iso8859-1,這種編碼是不支持中文

    * 如何解決:
    1、設置response緩衝區編碼
    response.setCharacterEncoding("utf-8");
    2、設置瀏覽器的編碼
    response.setHeader("Content-Type", "text/html;charset=utf-8");

8、開發中一些細節問題(注意的問題)
* 重定向操作(有兩種寫法)
** //設置狀態碼 302
response.setStatus(302);
//重定向到登錄頁面 使用頭 Location
response.setHeader(“Location”, “/day10/response/login.html”);

    ** //簡寫方式
       response.sendRedirect("/day10/response/login.html");

* 字符流解決中文問題(兩種寫法)
    ** 
    1、設置response緩衝區編碼
    response.setCharacterEncoding("utf-8");
    2、設置瀏覽器的編碼
    response.setHeader("Content-Type", "text/html;charset=utf-8");

    ** //簡寫方式
    response.setContentType("text/html;charset=utf-8");

* text/html;charset=utf-8:中間必須使用分號;隔開

* 使用字符流方式,不能直接向頁面輸出數字
    — 會去碼錶中取找數字對應的字符,把字符輸出
    - 想要輸出一個數字,使用字符串形式;response.getWriter().write("111");

* 字節流和字符流是互斥的(不能同時一起使用)
    * 或者使用字節流,或者使用字符流,而不能一起使用

9、使用response實現文件的下載
*文件下載有兩種方式:
第一種方式,直接使用超鏈接來實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章