使用session技术来实现网上商城购物车的功能
首先、简单的了解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技术来实现网上商城购物车的功能的更多相关文章
- session讲解(二)——商城购物车练习
网上商城中“添加商品到购物车”是主要功能之一,所添加的商品都存到了session中,主要以二维数组的形式存储在session中,在这里我们将以买水果为例 第一:整个水果商品列表 <body> ...
- 【JAVAWEB学习笔记】网上商城实战5:后台的功能模块
今日任务 完成后台的功能模块 1.1 网上商城的后台功能的实现: 1.1.1 后台的功能的需求: 1.1.1.1 分类管理: [查询所有分类] * 在左侧菜单页面中点击分类管理: * ...
- 【SSH网上商城项目实战25】使用java email给用户发送邮件
转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...
- Apache代理Tomcat实现session共享构建网上商城系统
一.环境介绍 二.安装配置后端服务器 三.安装配置前端服务器 四.配置Tomcat服务器实现session共享 五.构建网上商城系统 一.环境介绍 系统版本:CentOS 6.4_x86_64 Mys ...
- javaWeb学习总结(7)-会话之session技术
什么是Session 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度. Session技 ...
- SSH网上商城---需求分析+表关系分析
SSH---小编初次接触的时候傻傻的以为这个跟SHE有什么关系呢?又是哪路明星歌手,后来才知道小编又土鳖了,原来SSH是这个样子滴,百度百科对她这样阐述,SSH即 Spring + Struts +H ...
- 【SSH网上商城项目实战30】项目总结
转自:https://blog.csdn.net/eson_15/article/details/51479994 0. 写在前面 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了 ...
- 【SSH网上商城项目实战30】项目总结(附源码下载地址)
项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人.顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们 ...
- SSH网上商城一
Java高级项目之SSH网上商城项目实战: 1.采用目前最主流的三大框架开发即Struts2+Spring+Hibernate框架整合开发.2.通过AJAX技术提供良好的用户体验.3.提供了邮箱激活的 ...
随机推荐
- Bootstrap学习笔记(一) 排版
Bootsrap是一款优秀的前端开发框架,我从慕课网上开始学习Bootstrap,以下我学习过程中的一些笔记及代码. 首先学习排版: 从Bootstrap网站下载Bootstrap3中文文档(V3.3 ...
- MySQL页面打捞工具使用方法
MySQL数据打捞工具 0.1 windows版 下载 一,选择数据源与输出目录 数据源可以是分区或物理物理磁盘,如\\.\D: 或\\.\PhysicalDrive0; 二,参数设置 请设置扫描参数 ...
- 菜鸟级asp.net 与ms sql server数据库打交道的简单总结
using System.Data.SqlClient;using System.Data; 上面是必须的 下面说的都是用存储过程 首先是webconfig里面的连接字符串: <connecti ...
- [java学习笔记]java语言核心----面向对象之static关键字
static关键字用处 用于修饰成员变量和成员函数 被修饰后的成员具有以下特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 使用注意 静态方法只能访问静态成员:非静态方 ...
- 把div固定在网页顶部
很多网站都有把某一块固定在顶部的功能,今天上网搜搜然后自己又写了一遍,贴出来给大家看看,哪天用到的时候自己也可以随时看看 <!DOCTYPE html PUBLIC "-//W3C// ...
- Media Queries——媒体类型
媒体类型(Media Type)在CSS2中是一个常见的属性,也是一个非常有用的属性,可以通过媒体类型对不同的设备指定不同的样式. 在CSS2中常碰到的就是all(全部).screen(屏幕).pri ...
- android 软件开机自启动
安卓的很多功能实现方式都是“Don't call me, I'll call you back!”,开机启动就是其中之一 步骤: 1.首先建立一个BroadcastReceiver, 2.在他的onR ...
- 用JS写的简单轮播特效
效果如下 功能分析 1.每隔1秒换一张图片 2.鼠标移入停止切换.鼠标离开继续切换 3.鼠标移入到数字上面的时候,显示和数字对应的图片,并且停止切换,被选中的数字,背景显示橙色 4.鼠标离开数字,从该 ...
- $.ligerDialog 操作
//关闭 $.ligerDialog.open 打开的弹窗 frameElement.dialog.close(); //关闭父窗口 parent.$.ligerDialog.close(); //关 ...
- Linux 启动直接进入 console,
我的电脑上有两块显卡,上次fedora更新后,自动安装了nvidia的驱动, 然后悲剧发生了.再也不能够正常进行图形界面了.所以需要进入CONSOLE. 1. 当系统启动时,停止grub menu自动 ...