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())
// 獲取請求路徑 (相對路徑)
System.out.println(request.getContextPath())
// 獲取請求中攜帶的引數
// 引數是 提交表單時 表單的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 {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
request.setAttribute("name", "zhangsan");
request.getRequestDispatcher("/demo02").include(request, response);
out.write("123");
System.out.println("這是demo01 的結尾");
}
private void fun2(HttpServletResponse response) throws IOException {
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");
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 {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
String value = cookie.getValue();
long time = Long.parseLong(value);
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 = new Cookie("lastTime", System.currentTimeMillis() + "");
cookie.setPath("/sh-web-servlet/servlet");
cookie.setMaxAge(60*5);
response.addCookie(cookie);
}