HttpServletRequest使用者請求與cookie詳解

絲路花雨-發表於2018-03-28

HttpServletRequest 使用者請求物件

1.使用者請求物件包含:
 請求行
 請求頭
 請求體
     // 獲取請求的網址
    System.out.println(request.getRequestURL());
    // http://localhost:8080/sh-web-servlet02/demo08
    System.out.println(request.getRequestURI());
    // /sh-web-servlet02/demo08
    // 獲取請求的型別(用瀏覽器直接請求都是get請求)
    System.out.println(request.getMethod());// GET
    // 獲取請求路徑 (相對路徑)
    System.out.println(request.getContextPath());// /sh-web-servlet02

    // 獲取請求中攜帶的引數
    // 引數是 提交表單時 表單的name屬性
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println(username + "..." + password);

    // 判斷瀏覽器
    // 可以通過請求頭中的資訊獲取使用者使用的瀏覽器
    String header = request.getHeader("User-Agent");
    System.out.println(header);
    if (header.toLowerCase().contains("firefox")) {
        System.out.println("用的是火狐");
    }else if (header.toLowerCase().contains("chrome")) {
        System.out.println("用的是谷歌");
    }else {
        System.out.println("其他瀏覽器");
    }
}

請求轉發 請求重定向 請求包含

2. request 也是一個域物件
 域物件內部就是維護一個map集合(新增刪除獲取的方法)
 request域的作用範圍: 一次請求當中 可以獲取到域中儲存的資料
 public class Demo02 extends HttpServlet {
     public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
    // 編碼格式2句
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");

    // 獲取字元流
    PrintWriter out = response.getWriter();

    // 給request域新增值
    request.setAttribute("name", "zhangsan");
    // 請求包含
    // 相當於把兩個頁面的響應合成一個響應 返回給瀏覽器
    // 請求轉發 瀏覽器只能響應一次資料
    request.getRequestDispatcher("/demo02").include(request, response);

    //響應一句話
    out.write("123");
    System.out.println("這是demo01 的結尾");
    }

    private void fun2(HttpServletResponse response) throws IOException {
        // 請求重定向 檢視是否能獲取域中的值
        // 重定向是兩次請求 不能獲取到request域中的值
        // 重定向既可以訪問本地伺服器 也可以訪問非本地伺服器
        response.sendRedirect("/sh-web-servlet/demo02");
    }

    private void fun1(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
        // 請求轉發 只是伺服器內部的訪問 不管你怎麼寫路徑 始終都在專案路徑下
        RequestDispatcher dispatcher = request.getRequestDispatcher("/demo02");
        dispatcher.forward(request, response);
    }
}
public class Demo02 extends HttpServlet {   
    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
        response.getWriter().write("456");
        // 獲取request域中儲存的值
        String name = (String)request.getAttribute("name");
        System.out.println(name);
        System.out.println("這是demo02"); 
    }
}
3.cookie(客戶端技術)
  cookie是儲存在瀏覽器中的快取資料
  當發起一個請求 請求一個servlet
  進行邏輯處理(新增一個商品進購物車)
  處理完成後 給客戶端(瀏覽器)一個響應
  響應中攜帶著記錄了購買的什麼商品的 cookie
  讓瀏覽器儲存起來 可以是儲存在記憶體當中(結束會話 cookie被清除) 
  也可以儲存在硬碟當中(結束會話 依然存在 就是個檔案)
  當瀏覽器再一次請求購物車的時候
  會攜帶著之前儲存的 cookie 去訪問

  每個網站可以儲存20個cookie 整個瀏覽器可以儲存300個
  注意:第一次訪問伺服器的時候 是不會攜帶著cookie去訪問的
  因為cookie還沒有產生 只有當第一次請求後的響應中可以把cookie寫回到瀏覽器中 

利用cookie 顯示上次登入的時間
public class Test extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    // 編碼格式2句
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");

    // 讀取cookie
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        // 遍歷陣列
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("lastTime")) {
                // 取出cookie的值
                String value = cookie.getValue();
                // 字串轉long
                long time = Long.parseLong(value);
                // 轉成日期 Date
                Date date = new Date(time);
                // 建立一個顯示的日期格式
                // 引數就是你想要顯示的日期格式
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
                // 格式化時間
                String lastTime = dateFormat.format(date);
                // 響應回瀏覽器顯示
                response.getWriter().write("上次訪問時間" + lastTime);
            }
        }
    }
    // 建立cookie 記錄當前時間
    Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
    // 設定一下cookie的儲存路徑 工程名+配置網址路徑
    // 讀取cookie是按 請求的地址尋找 cookie的
    // 如果你配置請求 沒有一級目錄 這樣全網站所有的網址請求都能找到你這個cookie
    // cookie.setPath("/");
    cookie.setPath("/sh-web-servlet/servlet");
    // 設定cookie存活時間
    // 負值表示 瀏覽器關閉 cookie消失
    // 正值表示 存活的時間
    // 0 表示 刪除cookie
    cookie.setMaxAge(60*5);
    // 把cookie新增進響應當中
    response.addCookie(cookie);
}

相關文章