HttpServletRequest使用者請求與cookie詳解
阿新 • • 發佈:2018-12-20
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"); } }
cookie 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);
}