Cookie
声明
本文部分内容参考自其他作者原创文章,仅供个人学习留档,特此声明
参考文章链接
(3条消息) 【狂神】JavaWeb笔记_码畜也有梦想的博客-CSDN博客_狂神javaweb笔记
Servlet Cookie 处理 | 菜鸟教程 (runoob.com)
Cookie
Servlet Cookie 处理 | 菜鸟教程 (runoob.com)
1、代码
1.新建 CookieDemo01 类
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
public class CookieDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//服务器告诉你,你来的时间,把这个时间封装成为一个信件,你下次带来,我就知道你来了
//解决中文乱码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
//Cookie,服务器从客户端获取;
Cookie[] cookies = req.getCookies(); //这里返回数组,说明Cookie可能存在多个
//判断cookie是否存在
if (cookies != null){
//如果存在,就获取
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//获取cookie的名字(键)
if (cookie.getName().equals("lastLoginTime")) {
//获取cookie的值(值)
String lastLoginTime = cookie.getValue();
Date date = new Date(Long.parseLong(lastLoginTime));
out.write("您上次访问本站的时间是:" + date.toLocaleString());
}
}
} else {
out.write("这是您第一次访问本站");
}
//服务器给客户端响应一个cookie,一个cookie就是一个键值对
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
cookie.setMaxAge(24*60*60);//设置cookie有效期为一天
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2.用于注册映射路径的web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>cookie01</servlet-name>
<servlet-class>com.xy.servlet.CookieDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookie01</servlet-name>
<url-pattern>/cookie01</url-pattern>
</servlet-mapping>
</web-app>
3.用于添加依赖和防止打包不全的pom.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xy</groupId>
<artifactId>javaweb-cookie-session</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
2、代码测试
-
获取 name 为
lastLoginTime
的Cookie并写入网页 -
服务器给客户端响应一个cookie
resp.addCookie(cookie);
3、遇到的问题(解决)
1.网页显示乱码问题
解决方式为在 CookieDemo01
代码中添加以下代码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
2.获取Cookie问题
请求获取Cookie以后一定要返回一个数组,因为Cookie一般存在多个
Cookie[] cookies = req.getCookies();
4、知识点总结
1. 总结练习过程
其实上边的练习总的来讲就是经历了以下过程
- 从请求中拿到 cookie 信息
- 服务器响应给客户端 cookie
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
cookie:一般会保存在本地的 用户目录下 appdata;
2. Cookie上限问题
一个网站cookie是否存在上限!聊聊细节问题
- 一个 Cookie 只能保存一个信息;
- 一个 web 站点可以给浏览器发送多个 cookie,最多存放 20 个 cookie;
- Cookie 大小有限制 4kb;
- 浏览器上限:300 个 cookie
3. 删除Cookie的方法
删除 Cookie:
- 不设置有效期,默认为关闭浏览器后Cookie自动失效;
- 设置有效期时间为 0 ;
cookie.setMaxAge(MaxAge)
,如果 maxAge 为负数,则表示该 Cookie 仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该 Cookie 即失效。maxAge 为负数的 Cookie为临时性 Cookie,不会被持久化,不会被写到 Cookie 文件中。Cookie 信息保存在浏览器内存中,因此关闭浏览器该 Cookie 就消失了。Cookie 默认的maxAge值为-1。
如果 maxAge 为 0 ,则表示在 resp.addCookie(cookie);
操作之后立马删除该 Cookie。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律