request和response

2018/8/10

response對象(響應對象)
  * 想要獲取客戶端的內容,使用request對象。對客戶端做出響應使用response對象。
  
  * 響應:
   * 響應行
    * 狀態碼:
     void setStatus(int sc) 設置狀態碼
     
   * 響應頭(key:value的形式,一個key對應一個value,一個key對應多個value)
    * 設置頭信息
     void setHeader(String name, String value)  (一個key對應一個value)經常使用的
      setHeader("aa","bb");
      setHeader("aa","cc");
      結果:aa:cc
      
     void setIntHeader(String name, int value) 
     void setDateHeader(String name, long date) 值是毫秒值(int 秒 long 毫秒)
      
     void addHeader(String name, String value)  (一個key對應多個value)
      addHeader("aa","bb");
      addHeader("aa","cc");
      結果:aa:bb,cc
      
     void addIntHeader(String name, int value) 
     void addDateHeader(String name, long date)       
     
   * 響應體
    ServletOutputStream getOutputStream()   字節輸出流
    PrintWriter getWriter()      字符輸出流
    
    
  * 案例
   重定向(登陸頁面)
    * 登陸頁面重定向
    * 狀態碼302  應頭location
    * 需求:登陸頁面,用戶名和密碼的登陸頁面,用戶名和密碼都是admin,
      如果有一個不是,重定向到登陸頁面,重新登陸。
      
     // 設置302的狀態碼
     response.setStatus(302);
     // 設置地址
     response.setHeader("location", "/day10/response/login.html"); 
     
     // response對象提供了一個方法,可以完成重定向。
     response.sendRedirect("/day10/response/login.html");
     
   頁面定時刷新(頁面讀秒操作)
    * 響應的頭 refresh 
    <meta http-equiv="refresh" content="5;url=/day10/response/login.html">
    
   禁用瀏覽器緩存(三個頭信息)
    * 應用:網銀。頁面的數據是發送變化的。
    Cache-Control : no-cache
    Expires: -1     值是日期類型(setDateHeader())
    Pragma : no-cache
    
    
   向頁面輸出中文(亂碼問題)
    字節:ServletOutputStream getOutputStream()   字節輸出流
      * 字節的輸出中文的亂碼
      *  * 輸出哈羅我的是否亂碼呢?
      *   * 不一定亂碼。
      *  * 解決辦法
      *   * 設置瀏覽器打開文件時所採用的編碼
      *    response.setHeader("Content-Type", "text/html;charset=UTF-8");
      *   * 獲取字符串byte數組時編碼和打開文件時編碼一致。
      *    "哈羅我的".getBytes("UTF-8")
     
    PrintWriter getWriter()      字符輸出流
    
      * 字符輸出中文是否亂碼呢?
      *  * 肯定亂碼
      *   response緩衝區的編碼,默認值ISO-8859-1
      *  * 設置response緩衝編碼  
      *   response.setCharacterEncoding("UTF-8");
      *  * 設置瀏覽器打開文件所採用的編碼
      *   response.setHeader("Content-Type", "text/html;charset=UTF-8");
      *  * 簡寫方式
      *   response.setContentType("text/html;charset=UTF-8");
     
     
    * 總結:response對象輸出中文,產生亂碼。
     * 字節
      * 解決方案
       * 設置瀏覽器打開文件時採用的編碼
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
       * 獲取字符串的byte數組採用的編碼
        "哈羅我的".getBytes("UTF-8")
     * 字符
      * 解決方法
       * 設置瀏覽器打開文件時採用的編碼
        response.setHeader("Content-Type", "text/html;charset=UTF-8");
       * 設置response緩衝區的編碼
        response.setCharacterEncoding("UTF-8");
        
      * 簡寫的方式(等於上面的兩句)
       * response.setContentType("text/html;charset=UTF-8");
    
   實現文件下載(初級的下載)
    * 超鏈接,瀏覽器可以解析直接打開。
    * 彈出下載窗口。
     * 前提條件:先準備一個文件。
     * 讀取文件,讀入到輸入流中。
     * 通過response讀出到瀏覽器端。
     * 設置頭信息 
      * Content-Disposition attachment;filename=文件名稱
      * 以附件的形式打開。
     
   實現驗證碼(*****)
    
  
 request對象(請求對象)
  
  ServletRequest
   |
  HttpServletRequest 
  
  
  獲取客戶機信息
   getRemoteAddr(*****) 獲取IP地址
   getMethod() (*****)    獲取請求方式
   getContextPath()(*****)  獲取虛擬路徑
   
  獲取請求頭信息
   String getHeader(String name)    
   long getDateHeader(String name)   
   int getIntHeader(String name)    
   
   * 請求頭
    referer    記住當前網頁的來源
    User-Agent   判斷瀏覽器
    if-modified-since 控制緩存
    
  獲取請求參數(*****)
   String getParameter(String name) (*****)
   String[] getParameterValues(String name)(*****) 
   
   Map getParameterMap()(*****)
   
   Enumeration getParameterNames()(用的比較少) 
   
   亂碼問題解決:
    * POST請求亂碼 :request.setCharacterEncoding("utf-8");
    
    * GET請求亂碼
     解決方案一:修改tomcat/conf/server.xml
      <Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="utf-8"/>
     * 必須有修改tomcat服務器配置文件權限
     
     解決方案二:逆向編解碼
     username = URLEncoder.encode(username, "ISO8859-1");
     username = URLDecoder.decode(username, "utf-8");
     
     解決方案三:簡寫的方式(推薦使用)
     username = new String(username.getBytes("ISO-8859-1"),"utf-8");
     
    * request獲取中文數據亂碼(總結:)
     * post提交
      * 設置request緩衝區的編碼
       request.setCharacterEncoding("utf-8");
     * get提交
      * String構造方法
       username = new String(username.getBytes("ISO-8859-1"),"utf-8");
      
      
  利用請求域傳遞對象(request域對象)
  重定向和轉發的區別(轉發)(*****)
   
   * 域對象
    ServletContext:服務器一啓動,爲每個web應用創建一個ServletContext對象,所有servlet實例共享對象。 
    request:一次請求的範圍。
    
   * setAttribute("","");
   * getAttribute("");
   * removeAttribute("");
   
   
   * getRequestDispatcher(String path) ,返回是RequestDispatcher:對象
   * RequestDispatcher:
    * forward(ServletRequest request, ServletResponse response)(經常使用) 轉發的方法
    * include(ServletRequest request, ServletResponse response)(瞭解) 包含
   
  

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