首先、简单的了解session和cookie的区别:

一、session和cookie的区别:

session是把用户的首写到用户独占的session中(服务器端)

cookie是把用户的数据写给用户的浏览器。

session对象由服务器创建,开发人员可以调用request对象的getsession方法得到session对象。

首先写页面代码,仍然借助于商品浏览记录来写:

1、jsp购买页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<!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>购物页面</title>
</head>
<body>
<h1>商品列表</h1>
<ul >
<li><a href="/myday07/addcookie?id=1">java基础</a><a href="/myday07/buysession?id=1">购买</a></li>
<li><a href="/myday07/addcookie?id=2">javaweb</a><a href="/myday07/buysession?id=2">购买</a></li>
<li><a href="/myday07/addcookie?id=3">DHTML</a><a href="/myday07/buysession?id=3">购买</a></li>
<li><a href="/myday07/addcookie?id=4">数据库</a><a href="/myday07/buysession?id=4">购买</a></li>
<li><a href="/myday07/addcookie?id=5">Struts</a><a href="/myday07/buysession?id=5">购买</a></li>
<li><a href="/myday07/addcookie?id=6">Spring</a><a href="/myday07/buysession?id=6">购买</a></li>
<li><a href="/myday07/addcookie?id=7">Hibernate</a><a href="/myday07/buysession?id=7">购买</a></li>
</ul>
<h1>最近访问记录</h1><h5><a href="/myday07/clearcookie">清空数据</a> </h5>
<%
String[] arr = {"java基础","javaweb","DHTML","数据库","Struts","Spring","Hibernate"};
// 获得所有cookie
Cookie[] cookies = request.getCookies(); // 在cookie中查找商品浏览记录
String visitlist = null;
if(cookies!=null){
for (Cookie cookie : cookies) {
if (cookie.getName().equals("visitlist")) {
visitlist = cookie.getValue();
break;
}
} if(visitlist==null){ // 商品列表不存在
out.println("无");
}else{
String[] existIds = visitlist.split(",");
for(String existId:existIds){
int id = Integer.parseInt(existId);
out.println(arr[id-1]+"<br/>");
}
}
}
%>
<hr> <h1>购物车列表</h1> <%
//1.获得购物车列表
Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart");
//2.遍历map输出
if(cart!=null){
Set<String> keys=cart.keySet();
for(String id:keys)
{
int number=cart.get(id);//每件商品的数量
int idInt=Integer.parseInt(id);
String productName=arr[idInt-1];
out.println("商品名称:"+productName+",商品数量:"+number+"<br/>");
}
}
%> <hr/>
</body>
</html>

2、编写商品浏览记录的servlet页面

package cn.itcast.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; public class addCookie extends HttpServlet { // 获得用户当前访问商品,更新到商品浏览记录列表
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 自动刷新
response.setHeader("refresh", "2;url=/myday07/products1.jsp"); // 1、获得当前用户浏览商品id
String id = request.getParameter("id");
// 2、获得用户浏览记录列表
Cookie[] cookies = request.getCookies();
// 查找访问记录列表 name:visitlist ----- 1,3,5,6
String visitlist = null;
if (cookies != null) { // 存在cookie
for (Cookie cookie : cookies) {
if (cookie.getName().equals("visitlist")) {
visitlist = cookie.getValue();
break;
}
}
if (visitlist == null) {
// 列表不存在,当前商品第一件商品
Cookie cookie = new Cookie("visitlist", id);
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
response.getWriter().println("add success");
} else {
// 3、判断当前商品是否已经在列表中
String[] existIds = visitlist.split(",");
for (String exsitId : existIds) {
if (exsitId.equals(id)) { // id存在在列表中
response.getWriter().println("add success");
return;
}
}
// 4、如果当前商品不在列表中,添加到列表
Cookie cookie = new Cookie("visitlist", visitlist + "," + id);
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
response.getWriter().println("add success");
}
} else {
// 表示 并没有该站点的任何cookie
Cookie cookie = new Cookie("visitlist", id);
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
response.getWriter().println("add success");
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }

3、编写清除缓存的cookie页面

package cn.itcast.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; public class clearCookie extends HttpServlet
{ public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
Cookie cookie=new Cookie("visitlist","");
cookie.setMaxAge(0);
response.addCookie(cookie);
response.sendRedirect("/myday07/products1.jsp"); } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
} }

4、编写商品购买页面

package cn.itcast.cookie;

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; public class BuySession extends HttpServlet
{
//添加商品到购物车
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//1.获得商品的id
String id=request.getParameter("id");
//2.获得购物车cart--从session得到
HttpSession session=request.getSession();
Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart");//如果session中没有购物车呢
if(cart==null)
{//原来的session中并不存在购物车
cart=new HashMap<String, Integer>();
}
//3.判断商品是否存在购物车中
if(cart.containsKey(id))
{
//4.存在数量+1
int number=cart.get(id);
cart.put(id, number+1);
}else{
//5.不存在 将商品存入购物车 数量1
cart.put(id, 1);
}
session.setAttribute("cart", cart); response.sendRedirect("/myday07/products1.jsp");//重定向回去 } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
} }

最终效果如下:

使用session技术来实现网上商城购物车的功能的更多相关文章

  1. session讲解(二)——商城购物车练习

    网上商城中“添加商品到购物车”是主要功能之一,所添加的商品都存到了session中,主要以二维数组的形式存储在session中,在这里我们将以买水果为例 第一:整个水果商品列表 <body> ...

  2. 【JAVAWEB学习笔记】网上商城实战5:后台的功能模块

    今日任务 完成后台的功能模块 1.1      网上商城的后台功能的实现: 1.1.1    后台的功能的需求: 1.1.1.1  分类管理: [查询所有分类] * 在左侧菜单页面中点击分类管理: * ...

  3. 【SSH网上商城项目实战25】使用java email给用户发送邮件

       转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...

  4. Apache代理Tomcat实现session共享构建网上商城系统

    一.环境介绍 二.安装配置后端服务器 三.安装配置前端服务器 四.配置Tomcat服务器实现session共享 五.构建网上商城系统 一.环境介绍 系统版本:CentOS 6.4_x86_64 Mys ...

  5. javaWeb学习总结(7)-会话之session技术

    什么是Session 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度. Session技 ...

  6. SSH网上商城---需求分析+表关系分析

    SSH---小编初次接触的时候傻傻的以为这个跟SHE有什么关系呢?又是哪路明星歌手,后来才知道小编又土鳖了,原来SSH是这个样子滴,百度百科对她这样阐述,SSH即 Spring + Struts +H ...

  7. 【SSH网上商城项目实战30】项目总结

      转自:https://blog.csdn.net/eson_15/article/details/51479994 0. 写在前面 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了 ...

  8. 【SSH网上商城项目实战30】项目总结(附源码下载地址)

    项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人.顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们 ...

  9. SSH网上商城一

    Java高级项目之SSH网上商城项目实战: 1.采用目前最主流的三大框架开发即Struts2+Spring+Hibernate框架整合开发.2.通过AJAX技术提供良好的用户体验.3.提供了邮箱激活的 ...

随机推荐

  1. 20分钟入门Redux

    Redux就是个数据中心,不依附于任何框架在哪使用都行.但是和它最搭配的应该就是React了,而且大家学习它的动力大多也是解决React状态管理的问题.都说Redux文档详尽清晰,但我感觉并不友好,它 ...

  2. margin折叠

    什么是margin折叠:当两个或更多个垂直边距相遇时,它们将形成一个外边距.这个外边距的高度等于两个发生叠加的外边距的高度中的较大者. 注意:                           (1 ...

  3. amcharts 网页绘图插件

    Amcharts是一组js图表,你可以免费使用在你的网站和基于网络的产品(非开源). Amcharts可以从简单的json提取数据,也可以从动态数据读取生成,比如PHP, .NET, Ruby on ...

  4. fill与memset的区别

    fill 的头文件是<iostream> 命名空间是std: 在memset(a,0(-1),sizeof(a))全部初值定为0或-1时两者是没有多大区别; 但是在初值为其他值得时候就不同 ...

  5. lnmp安装--php安装

    版本:php5.6.4 x86_64 centos 6.6 x86_64 安装php之所以难,是因为要安装的扩展多,依赖关系复杂. 安装前的准备: 先看你想要安装哪些扩展.需要哪些包.下载地址:htt ...

  6. what is the “handover” and "soft handover" in mobile communication system?

    Handover: 切换,属于移动通信网络中的技术术语. 所谓切换,就是指当移动台在通话过程中从一个基站覆盖区移动到另一个基站覆盖区,或者由于外界干扰而造成通话质量下降时,必须改变原有的话音信道而转接 ...

  7. Android类库常用类库一览

    在Android SDK中包括很多包文件,通过了解这些包的功能也有助于了解可以开发的功能. 在Android类库中,各种包写成android.*的方式,重要包的描述如下所示: android.app ...

  8. 1062 Talent and Virtue (25)

    /* L (>=60), the lower bound of the qualified grades -- that is, only the ones whose grades of ta ...

  9. fineui框架

    http://fineui.com/demo/#/demo/layout/fit.aspx 虽然比较丑陋,但功能实用 此框架比较简单, 框架的作用你懂的,重点是要有帮助文档, 进阶型的容易上手的帮助文 ...

  10. 用于软件包管理的21个Linux YUM命令

    FROM:http://os.51cto.com/art/201309/411895.htm YUM(Yellowdog Updater Modified)是一款开源命令行及图形化软件包管理工具,面向 ...