首先、简单的了解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. Tomcat遇到的问题The Tomcat server configuration at ServersTomcat v5.5 Server at localhost-config is missing. Check..

    一.解决方法 删除Servers视图,重新创建一个即可.

  2. netty启动过程

    netty先启动work线程,work线程打开selector 绑定pipeline 启动boss线程,绑定端口,注册selector,绑定op_accetp事件 ------------------ ...

  3. swing画太极图案源码

    package org.open.swing.taiji; /** * @(#)Taichi.java * * * @author * @version 1.00 2007/6/12 */ impor ...

  4. CSS 中的 em单位

    em的对应的像素值如何计算,一言以蔽之:em就是倍数当前元素font-size的倍数,其结果就是当前字体的像素值乘以em的值,至于font-size来自何处?有两个来源:继承自父元素和通过CSS直接设 ...

  5. 排序,求几个最值问题,输入n个整数,输出其中最小的k个元素。

    看完两个求最大值算法之后的一些感想. 如果想直接看算法的可以跳过.但是我觉得我这些想法还是比较有用的,至少对我将来的算法设计是这样的. 算法的功能越强大,必然意味着速度慢,因为根据丛林法则,那种慢又功 ...

  6. linux安装Vmware的时候出现“Could not open /dev/vmmon”

    在centos6.6上安装了Vmware之后运行出现下列问题 VMware Workstation : Could not open /dev/vmmon: No such file or direc ...

  7. Mooncake (排序+贪心)

    Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types ...

  8. 1065. A+B and C (64bit)

    #include<stdio.h> #include <math.h> int main() { long long a,b,c,sum; int n,i; while(sca ...

  9. Redhat 显示系统版本号和内核版本号

    1./etc/issue 和 /etc/redhat-release都是系统安装时默认的发行版本信息,通常安装好系统后文件内容不会发生变化.[root@rac1 mysql]# cat /etc/is ...

  10. Linux内核中的常用宏container_of

    Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址. Containe ...