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);
}
复制代码