一、概念
为什么需要cookie:
package gac.xdp.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CookieDemo01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置服务器端以UTF-8编码进行输出 response.setCharacterEncoding("UTF-8"); //设置浏览器以UTF-8编码进行接收,解决中文乱码问题 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //获取浏览器访问访问服务器时传递过来的cookie数组 Cookie[] cookies = request.getCookies(); //如果用户是第一次访问,那么得到的cookies将是null if (cookies!=null) { out.write("您上次访问的时间是:"); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("lastAccessTime")) { Long lastAccessTime =Long.parseLong(cookie.getValue()); Date date = new Date(lastAccessTime); out.write(date.toLocaleString()); } } }else { out.write("这是您第一次访问本站!"); } //用户访问过之后重新设置用户的访问时间,存储到cookie中,然后发送到客户端浏览器 Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");//创建一个cookie,cookie的名字是lastAccessTime //将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时就会把cookie也输出到客户端浏览器 response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
效果:
在上面的例子中,在程序代码中并没有使用setMaxAge方法设置cookie的有效期,所以当关闭浏览器之后,cookie就失效了,要想在关闭了浏览器之后,cookie依然有效,那么在创建cookie时,就要为cookie设置一个有效期。如下所示:
//用户访问过之后重新设置用户的访问时间,存储到cookie中,然后发送到客户端浏览器
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");//创建一个cookie,cookie的名字是lastAccessTime
//设置Cookie的有效期为1天
cookie.setMaxAge(24*60*60);
//将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时就会把cookie也输出到客户端浏览器
response.addCookie(cookie);
package gac.xdp.cookie; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 删除cookie */ public class CookieDemo02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建一个名字为lastAccessTime的cookie Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+""); //将cookie的有效期设置为0,命令浏览器删除该cookie cookie.setMaxAge(0); response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
session案例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>手电筒<a href="/day11/cart?id=1">加入购物车</a></h3>
<h3>电视<a href="/day11/cart?id=2">加入购物车</a></h3>
<h3>冰箱<a href="/day11/cart?id=3">加入购物车</a></h3>
<h3>洗衣机<a href="/day11/cart?id=4">加入购物车</a></h3>
<h3>电话<a href="/day11/cart?id=5">加入购物车</a></h3>
<h3>电脑<a href="/day11/cart?id=6">加入购物车</a></h3>
</body>
</html>
package cn.itcast.session; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 购物车的后台 * @author Administrator * */ public class CartServlet extends HttpServlet { private static final long serialVersionUID = -4944571720622706932L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 0.Map<String,Integer> cart 车里面放商品的名称和数量。 * 1.接收参数,接收的id值。把id值转换成相应的商品。 * 2.判断是否是第一次购买(从session中获取车,如果车是null,肯定是第一次购买) * * 如果是一次购买,创建一个购物车,把该商品和数量存入到车中,再把车存入到session中。 * * 如果不是第一次购买 * * 先判断车中是否包含该商品,因为如果包含该商品了,数量+1 * * 如果不包含该商品,直接把该商品存入车中。 * 3.转发或者重定向到继续购物或者结算页面 * 4.去结算的页面(把商品的名称和数量显示到页面上) */ // 先获取请求的参数 String id = request.getParameter("id"); // 想id转换成响应的商品名称 String [] names = new String []{"手电筒","电视","冰箱","洗衣机","电话","电脑"}; // 转换成int类想 int index = Integer.parseInt(id); // 当前的商品名称 String productName = names[index - 1]; // 先获取session HttpSession session = request.getSession(); // 从session来获取车 Map<String, Integer> cart = (Map<String, Integer>)session.getAttribute("cart"); // 如果cart是null if(cart == null){ // 第一次 // 把购买的商品存入到车中 cart = new HashMap<String, Integer>(); // 把商品放入车中 cart.put(productName, 1); // 把车放入session中 session.setAttribute("cart", cart); }else{ // 先获取车中的内容,和当前购买的商品进行判断 if(cart.containsKey(productName)){ // 先获取商品的数量 Integer count = cart.get(productName); // 数量+1 count++; // 在把商品存入车中 cart.put(productName, count); // 存入到session中 session.setAttribute("cart", cart); }else{ // 直接存入到车中 cart.put(productName, 1); // 存入到session中 session.setAttribute("cart", cart); } } // 重定向到继续购物或者去结算的页面 response.sendRedirect(request.getContextPath()+"/session/gopay.jsp"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3><a href="/day11/session/cartlist.jsp">继续购物</a>|<a href="/day11/session/pay.jsp">去结算</a></h3>
</body>
</html>
<%@page import="java.util.Set"%> <%@page import="java.util.Map"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h4>商品的信息</h4> <% // 获取车 Map<String,Integer> cart = (Map<String,Integer>)request.getSession().getAttribute("cart"); // 购物车不为空 if(cart != null){ // 获取车的商品名称和数量 Set<String> names = cart.keySet(); // 循环set集合,商品的名称 for(String name : names){ %> <h3>亲,您购买了<%= name %>,数量是<%= cart.get(name) %></h3> <% } }else{ %> <h3>亲,您还没有<a href="/day11/session/cartlist.jsp">败家</a>,请您快去败家</h3> <% } %> </body> </html>
javaweb学习总结(十一)——使用Cookie进行会话管理
原文:https://www.cnblogs.com/EST-woah/p/10621206.html