javax.servlet.http.Cookie
用于服务器在客户端保存信息,这些信息就像小甜点一样,数据量并不大,服务器端在需要的时候可以从客户端读取。 C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default/Cache
代码 | 描述 |
---|---|
new Cookie("K", "V")
|
通过构造器注入要存储的KV对信息 |
setMaxAge()
|
设置cookie存活时间,单位为秒,如果不设置或者设置为0,则cookie不存在 |
getName()
|
获取cookie中的key |
getValue()
|
获取cookie中的value |
resp.addCookie()
|
将Cookie回写到客户端 |
req.getCookies()
|
从请求中获取所有Cookie,返回一个Cookie数组 |
需求:在Servlet中利用Cookie存值,然后在页面端使用JS取出。
/** * @author JoeZhou */ @WebServlet("/servlet/cookie") public class CookieServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 转码 req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); // 设置cookie,存7天,并回写到客户端 Cookie usernameCookie = new Cookie("username", "admin"); usernameCookie.setMaxAge(7 * 24 * 3600); resp.addCookie(usernameCookie); // 遍历请求中的所有cookie,打印username对应的值 // 第一次请求时刚完成Cookie的回写,取不到Cookie[],第二次请求可以取到 Cookie[] cookies = req.getCookies(); for (int i = 0, j = cookies.length; i < j; i++) { if ("username".equals(cookies[i].getName())) { System.out.println(cookies[i].getValue()); break; } } // 转 req.getRequestDispatcher("/main.jsp").forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } } 复制代码
脚本:页面端可以使用JS取值。
onload = () => { let result; /*按照分号和空格分割的cookies*/ let cookies = document.cookie.split("; "); /*循环遍历这个数组*/ for (let i = 0, j = cookies.length; i < j; i++) { /*将每一个KV对再按照等号分割*/ let kvs = cookies[i].split("="); /*如果"username"对应的值*/ if (kvs[0] === "username") { result = kvs[1]; break; } } console.log(result); } 复制代码