Cookie案例
做一个商品页面,当我们访问后,在页面上点击查看商品浏览记录后,可以查看到以前浏览过的商品信息
前端商品界面(goods.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>商品列表</h3>
<a href="/goodsInfoServlet?name=小米10">小米10</a> <br>
<a href="/goodsInfoServlet?name=华为P40">华为P40</a> <br>
<a href="/goodsInfoServlet?name=iphoneSE">iphoneSE</a> <br>
<a href="/goodsInfoServlet?name=锤子T2">锤子T2</a> <br>
</body>
</html>
浏览记录界面(history.jsp)
<%@ page import="com.lifly.servlet.cookie案例.CookieUtils" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/6/14 0014
Time: 15:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>history</title>
</head>
<body>
<%
//获取指定cookie对象
Cookie cookie = CookieUtils.findByName("goods_name", request.getCookies());
//判断是否存在浏览器
if (cookie==null){
out.write("暂无浏览记录。。。。。。");
}else {
out.write("浏览器记录如下:<br>");
String value = cookie.getValue();
for (String product:value.split("-")) {
out.write(product+"<br>");
}
}
%>
</body>
</html>
后端业务逻辑
cookie工具类
public class CookieUtils {
/*
根据指定名称,查找cookie对象
*/
public static Cookie findByName(String name, Cookie[] cookies) {
// 非空判断
if (cookies != null && cookies.length > 0) {
// 遍历
for (Cookie cookie : cookies) {
// 判断是否有指定名称的cookie
if (name.equals(cookie.getName())) {
return cookie;
}
}
}
// 没找到返回null
return null;
}
}
CookieServlet
/**
* @author lifly
* @date 2021/6/14 0014 15:29
*/
@WebServlet("/goodsInfoServlet")
public class GoodsInfoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 处理post请求乱码问题
request.setCharacterEncoding("utf-8");
// 设置响应数据的编码
response.setContentType("text/html;charset=utf-8");
// 获取浏览商品的名称
String name = request.getParameter("name");
// 展示商品
response.getWriter().write("您当前浏览商品为:" + name);
// 获取指定Cookie名称的对象
Cookie cookie = CookieUtils.findByName("goods_name", request.getCookies());
// 判断cookie是否存在
if (cookie == null) {
// 如果Cookie不存在,创建Cookie
cookie = new Cookie("goods_name", name);
}else{
String value = cookie.getValue();
// 添加浏览记录
List<String> products = Arrays.asList(value.split("-"));
if (!products.contains(name)) {
// 如果不存在,则添加
value= value+ "-" + name;
}
cookie = new Cookie("goods_name", value);
}
// 设置cookie的存活时间
cookie.setMaxAge(60 * 60 * 24);
// 响应给浏览器
response.addCookie(cookie);
response.getWriter().write("<br>");
response.getWriter().write("<a href='goods.html'>继续浏览</a><br>");
response.getWriter().write("<a href='history.jsp'>浏览记录</a>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
效果展示
商品展示界面
继续浏览和浏览查看界面
浏览记录产看界面
Session购物车案例
通过一个商品界面,可以点击超链接将商品添加到购物车,还有一个超链接,点击它的时候可以查看购物车中商品信息
商品展示(goods.jsp)
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/6/14 0014
Time: 14:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>good.jsp</title>
</head>
<body>
<h3>商品列表</h3>
<a href="/addCartServlet?name=电视机">电视机,加入购物车</a><br>
<a href="/addCartServlet?name=冰箱">冰箱,加入购物车</a><br>
<a href="/addCartServlet?name=洗衣机">洗衣机,加入购物车</a><br>
<a href="/addCartServlet?name=电脑">电脑,加入购物车</a><br>
</body>
</html>
购物车(cart.jsp)
<%@ page import="java.util.Map" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/6/14 0014
Time: 14:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>cart</title>
</head>
<body>
<h3>购物车页面</h3>
<table border="1" width="200px" align="center">
<tr>
<th>商品</th>
<th>数量</th>
</tr>
<%
// 1.从session中获取购物车
Map<String,Integer> cart = (Map<String, Integer>) request.getSession().getAttribute("cart");
// 2.判断是否为空
if(cart == null){
out.write("购物车内暂时没有商品<br>");
}else{
for (String s : cart.keySet()) {
out.write("<tr><td>"+s+"</td><td>"+cart.get(s)+"</td></tr>");
}
}
%>
</table>
</body>
</html>
后台逻辑业务代码展示
/**
* @author lifly
* @date 2021/6/14 0014 14:43
*/
@WebServlet("/addCartServlet")
public class AddCartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取请求参数
String product = request.getParameter("name");
//返回结果
response.getWriter().write(product+",商品已成功加入购物车<br>");
//从session中获取购物车
Map<String,Integer>cart = (Map<String, Integer>) request.getSession().getAttribute("cart");
//判断购物车是否为空
if (cart==null){
cart = new HashMap<>();
}
//判断购物车中是否包含本次添加的商品
if (cart.containsKey(product)){ //存在,数量+1
Integer oldCount = cart.get(product);
cart.put(product,oldCount+1); //数量加1
}else {
//不存在,直接添加商品,数量为1
cart.put(product,1);
}
//重新将购物车,写入到session中
request.getSession().setAttribute("cart",cart);
Set<Map.Entry<String, Integer>> entrySet = cart.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key+":"+value);
}
//继续浏览
response.getWriter().write("<a href='/goods.jsp'>继续浏览</a><br>");
//查看购物车
response.getWriter().write("<a href='/cart.jsp'>查看购物车</a>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}