protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 建立Cookie物件
Cookie cookie = new Cookie("key1","value1");
// 2. 通知用戶端儲存Cookie
resp.addCookie(cookie);
resp.getWriter().write("cookie建立成功");
}
伺服器獲取用戶端的Cookie只需要一行程式碼:req.getCookie(),就會返回Cookie的陣列Cookie[]
protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for (Cookie c:cookies
) {
//getName:返回Cookie的key值
//getValue:返回Cookie的Value值
resp.getWriter().write("Cookie[" + c.getName() + "=" + c.getValue()+"]</br>");
}
}
protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 先建立一個要修改的同名的Cookie物件
// 2. 在構造器,同時賦予新的Cookie值
Cookie cookie = new Cookie("key1","allValue");
// 3. 呼叫response.addCookie(cookie)
resp.addCookie(cookie);
resp.getWriter().write("key1的cookie值已經修改好了");
}
protected void updateCookie2(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 先查詢到需要修改的Cookie物件
Cookie cookie = CookieUtils.findCookie("key1",req.getCookies());
//2. 呼叫setValue()方法賦予新的Cookie值
if (cookie != null){
cookie.setValue("values");
}
//3. 呼叫response.addCookie(cookie)通知用戶端進行儲存
resp.addCookie(cookie);
}
Cookie的生命控制指的是如何管理Cookie什麼時候被銷燬(刪除)
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("default","value2");
cookie.setMaxAge(-1);
resp.addCookie(cookie);
}
protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("deleteNow","value2");
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
protected void second(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("30second","value2");
cookie.setMaxAge(30);
resp.addCookie(cookie);
}
Cookie的path屬性可以有效的過濾哪些Cookie可以發送給伺服器,哪些不發送。path屬性是通過請求的地址來進行有效的過濾
package com.zc.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author ZC
* @Description
* @date 2020-08-10 23:08
*/
@WebServlet(name = "LoginServlet")
public class LoginServlet extends BaseServlet {
protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("zc".equals(username) && "123".equals(password)){
System.out.println("登錄城功夫");
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24*7);
response.addCookie(cookie);
}else{
System.out.println("登錄失敗");
}
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<base href="http://localhost:8080/13_cookie_session/">
</head>
<body>
<form action="login?action=login" method="post" >
使用者名稱:<input type="text" name="username" value="${cookie.username.value}"></br>
密碼:<input type="password" name="password" > </br>
<input type="submit" value="登錄">
</form>
</body>
</html>
protected void createOrGetSeassion(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
boolean isNew = session.isNew();
String id = session.getId();
resp.getWriter().write("得到的Session,它的Id是"+id+"\n是不是新建立的:"+isNew);
}
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().setAttribute("key1", "value1");
resp.getWriter().write("已經往Session中儲存了數據");
}
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object attribute = req.getSession().getAttribute("key1");
resp.getWriter().write("從Session中獲取出key1的數據是:" + attribute);
}
public void setMaxInactiveInterval(int interval)
:設定Session的超時時間(以秒爲單位),超過指定的時長,Session就會被摧毁。public int getMaxInactiveInterval()
:獲取Session的超時時間session.invalidate()
:讓對談馬上超時注意:
session的超時指的是,用戶端兩次請求的最大時間間隔
Session技術,底層其實是基於Cookie技術實現的