Cookie 是Servlet用来在客户端存储少量数据的机制,常用于会话管理、用户偏好设置等。本文将介绍如何在Servlet中创建、读取和操作Cookie。
目录
1. Cookie 概述
- 定义:Cookie 是服务器发送到客户端的小文本数据,存储在浏览器中,随后续请求返回服务器。
- 用途:
- 跟踪用户会话。
- 保存用户偏好。
- Servlet API:通过
HttpServletResponse
添加Cookie,通过HttpServletRequest
获取Cookie。
2. 创建和设置Cookie
基本方法
使用 Cookie
类创建,并通过 addCookie()
添加到响应:
Cookie cookie = new Cookie("username", "Alice");
response.addCookie(cookie);
设置属性
- 有效期:
setMaxAge(int seconds)
,单位秒,-1表示浏览器关闭时失效。 - 路径:
setPath(String path)
,指定Cookie有效路径。
Cookie cookie = new Cookie("theme", "dark");
cookie.setMaxAge(60 * 60 * 24); // 1天
cookie.setPath("/myapp"); // 仅在/myapp下有效
response.addCookie(cookie);
3. 读取Cookie
从 HttpServletRequest
获取Cookie数组:
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
String value = cookie.getValue();
out.println("用户: " + value);
}
}
}
4. 修改和删除Cookie
修改Cookie
重新设置同名Cookie:
Cookie cookie = new Cookie("username", "Bob"); // 新值覆盖旧值
cookie.setMaxAge(60 * 60); // 1小时
response.addCookie(cookie);
删除Cookie
将有效期设为0:
Cookie cookie = new Cookie("username", "");
cookie.setMaxAge(0); // 立即失效
response.addCookie(cookie);
5. 完整示例
以下是一个展示Cookie操作的Servlet。
HTML:cookie.html
<!DOCTYPE html>
<html>
<head><title>Cookie 测试</title></head>
<body>
<form method="POST" action="/myapp/cookie">
用户名: <input type="text" name="username"><br>
<input type="submit" value="设置Cookie">
</form>
<a href="/myapp/cookie?action=delete">删除Cookie</a>
</body>
</html>
Servlet:CookieServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class CookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String action = request.getParameter("action");
if ("delete".equals(action)) {
Cookie cookie = new Cookie("username", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
out.println("<h1>Cookie 已删除</h1>");
} else {
Cookie[] cookies = request.getCookies();
String username = "未设置";
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
username = c.getValue();
}
}
}
out.println("<h1>当前用户: " + username + "</h1>");
}
out.println("<a href=\"/myapp/cookie.html\">返回</a>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
if (username != null && !username.trim().isEmpty()) {
Cookie cookie = new Cookie("username", username);
cookie.setMaxAge(60 * 60 * 24); // 1天
response.addCookie(cookie);
out.println("<h1>Cookie 设置成功: " + username + "</h1>");
} else {
out.println("<h1>请输入用户名</h1>");
}
out.println("<a href=\"/myapp/cookie.html\">返回</a>");
}
}
配置:web.xml
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>CookieServlet</servlet-name>
<servlet-class>CookieServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CookieServlet</servlet-name>
<url-pattern>/cookie</url-pattern>
</servlet-mapping>
</web-app>
6. 部署与测试
部署
- 编译:
javac -cp /path/to/tomcat/lib/servlet-api.jar CookieServlet.java
- 将
.class
文件放入myapp/WEB-INF/classes/
。 - 将
cookie.html
放入myapp/
。 - 更新
web.xml
。 - 部署
myapp
到Tomcat的webapps
目录。 - 启动Tomcat。
测试
- 访问:
http://localhost:8080/myapp/cookie.html
- 输入用户名并提交:显示“Cookie 设置成功”。
- 刷新页面:显示“当前用户: [用户名]”。
- 点击“删除Cookie”:显示“Cookie 已删除”,刷新后恢复“未设置”。
7. 参考资料
出站链接
- Cookie API – 官方API。
- Java EE教程 – Cookie章节。
- Tomcat文档 – Cookie支持。
其他资源
- 《Servlet & JSP: A Tutorial》 – Cookie处理章节。
- X社区:搜索 #ServletCookie 获取示例。
这篇指南展示了Servlet中Cookie的创建、读取和删除。如果需要更复杂功能(如加密Cookie或多Cookie管理),请告诉我!
发表回复