CookieServlet程序:
- @WebServlet(name = "CookieServlet", value = "/cookieServlet")
- public class CookieServlet extends BaseServlet {
- protected void createCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 1.创建Cookie对象
- Cookie cookie1 = new Cookie("key1", "value1");
- Cookie cookie2 = new Cookie("key2", "value2");
-
- // 2.通知客户端保存Cookie
- response.addCookie(cookie1);
- response.addCookie(cookie2);
-
- response.getWriter().write("cookie保存成功");
- }
- }
BaseServlet 程序:
- @WebServlet(name = "BaseServlet", value = "/BaseServlet")
- public abstract class BaseServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- doPost(req, resp);
- }
-
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 解决post请求中文乱码问题
- // 一定要在获取请求参数之前调用才有效
- request.setCharacterEncoding("UTF-8");
- response.setContentType("text/html;charset=UTF-8");
-
- String action = request.getParameter("action");
- // 获取 action 业务鉴别字符串,获取相应的业务 方法反射对象
- try {
- Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
- // 调用目标业务 方法
- method.invoke(this, request, response);
- } catch (Exception e) {
- // e.printStackTrace();
- }
- }
- }
html代码:
- html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="pragma" content="no-cache" />
- <meta http-equiv="cache-control" content="no-cache" />
- <meta http-equiv="Expires" content="0" />
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Cookietitle>
- <base href="http://localhost:8080/13_cookie/"/>
- <style type="text/css">
-
- ul li {
- list-style: none;
- }
-
- style>
- head>
- <body>
- <iframe name="target" width="500" height="500" style="float: left;">iframe>
- <div style="float: left;">
- <ul>
- <li><a href="cookieServlet?action=createCookie" target="target">Cookie的创建a>li>
- <li><a href="" target="target">Cookie的获取a>li>
- <li><a href="" target="target">Cookie值的修改a>li>
- <li>Cookie的存活周期li>
- <li>
- <ul>
- <li><a href="" target="target">Cookie的默认存活时间(会话)a>li>
- <li><a href="" target="target">Cookie立即删除a>li>
- <li><a href="" target="target">Cookie存活3600秒(1小时)a>li>
- ul>
- li>
- <li><a href="" target="target">Cookie的路径设置a>li>
- <li><a href="" target="target">Cookie的用户免登录练习a>li>
- ul>
- div>
- body>
- html>
- protected void getCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 1.获取Cookie数组
- Cookie[] cookies = request.getCookies();
-
- // 遍历Cookie 数组
- for (Cookie cookie : cookies) {
- // getName 方法返回 Cookie 的 key(名)
- // getValue 方法返回 Cookie 的 value 值
- response.getWriter().write("Cookie【" + cookie.getName() + "=" + cookie.getValue() + "】
"); - }
-
- // 获取name为key2的cookie
- Cookie iWantCookies = CookieUtils.findCookie("key2", cookies);
-
- // 如果不等于 null,说明赋过值,也就是找到了需要的 Cookie
- if (iWantCookies != null) {
- response.getWriter().write("获取到了想要的cookie" + iWantCookies.getName() + "=" + iWantCookies.getValue() + "
"); - }
- }
- public class CookieUtils {
- /**
- * 查找指定名称的Cookie
- * @param name
- * @param cookies
- * @return
- */
- public static Cookie findCookie(String name, Cookie[] cookies) {
- if (name == null || cookies == null || cookies.length == 0) {
- return null;
- }
- for (Cookie cookie : cookies) {
- if (name.equals(cookie.getName())) {
- return cookie;
- }
- }
- return null;
- }
- }
结果:
注意:对于 cookie,值不应包含空格、方括号、圆括号、等号、逗号、双引号、斜杠、问号、at 符号、冒号和分号。空值在所有浏览器上的行为不一定相同。也不能含有中文。
- protected void updateCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 方案一
- // 1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
- // 2、在构造器,同时赋于新的 Cookie 值。
- Cookie cookie = new Cookie("key1", "newValue1");
- // 3、调用 response.addCookie( Cookie );
- response.addCookie(cookie);
- response.getWriter().write("Cookie的ke1修改成功
"); - }
- protected void updateCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 方案一
- // 1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象
- // 2、在构造器,同时赋于新的 Cookie 值。
- Cookie cookie = new Cookie("key1", "newValue1");
- // 3、调用 response.addCookie( Cookie );
- response.addCookie(cookie);
- response.getWriter().write("Cookie的ke1修改成功
"); -
- // 方案二
- // 1、先查找到需要修改的 Cookie 对象
- Cookie cookie2 = CookieUtils.findCookie("key2", request.getCookies());
- // 2、调用 setValue()方法赋于新的 Cookie 值。
- cookie2.setValue("newValue2");
- // 3、调用 response.addCookie()通知客户端保存修改
- response.addCookie(cookie2);
-
- response.getWriter().write("Cookie的ke2修改成功
"); - }
结果:



- protected void defaultLift(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- Cookie defaultLift = new Cookie("defaultLift", "defaultLift");
- defaultLift.setMaxAge(-1);
- response.addCookie(defaultLift);
- response.getWriter().write("Cookie的默认存活时间 设置成功");
- }
- protected void deleteCookie(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // 先找到你要删除的 Cookie 对象
- Cookie defaultLift = CookieUtils.findCookie("defaultLift", request.getCookies());
- if (defaultLift != null) {
- // 调用 setMaxAge(0);
- defaultLift.setMaxAge(0);
- // 保存
- response.addCookie(defaultLift);
-
- response.getWriter().write("Cookie的defaultLift删除成功");
- }
- }
- protected void lift3600(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- Cookie lift3600 = new Cookie("lift3600", "lift3600");
- lift3600.setMaxAge(60 * 60); // 设置 Cookie 一小时之后被删除。无效
- response.addCookie(lift3600);
- response.getWriter().write("存活 1 个小时的 Cooie 设置成功");
- }
path 属性是通过请求的地址来进行有效的过滤。CookieA path=/工程路径CookieB path=/工程路径/abc请求地址如下:http://ip:port/工程路径/a.htmlCookieA 发送CookieB 不发送http://ip:port/工程路径/abc/a.htmlCookieA 发送CookieB 发送
代码示例:
- protected void setPath(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- Cookie cookie = new Cookie("path", "path");
- // request.getContextPath() 得到工程路径
- cookie.setPath(request.getContextPath() + "/abc");
- response.addCookie(cookie);
- response.getWriter().write("创建了一个带有 Path 路径的 Cookie");
- }
结果:


思路流程:
