1.创建Book类,实现对图书信息的封装。

package cn.it.sessionDemo.example1;

import java.io.Serializable;

/**
* 该类实现对图书的封装
*
* @author 12428
*
*/
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
private String ID;
private String name; public Book() { } public Book(String ID, String name) {
this.ID = ID;
this.name = name;
} public String getID() {
return ID;
} public void setID(String iD) {
ID = iD;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

2.创建一个BookDB类实现对图书类的操作

package cn.it.sessionDemo.example1;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map; /**
* 该类实现数据库模拟
*
* @author 12428
*
*/
public class BookDB {
private static Map<String, Book> books = new LinkedHashMap<String, Book>();
// 静态代码块在Java类被加载时执行,由于类只加载一次,应此静态代码块只执行一次。
static {
books.put("1", new Book("1", "javaweb开发"));
books.put("2", new Book("2", "jdbc开发"));
books.put("3", new Book("3", "java基础"));
books.put("4", new Book("4", "struts开发"));
books.put("5", new Book("5", "spring开发"));
} // 获得所有的图书
public static Collection<Book> getAll() {
return books.values();
} // 根据指定的ID获得图书
public static Book getBook(String ID) {
return books.get(ID);
} }

3.创建一个ListBookServlet类,用来显示可购买的图书信息。

package cn.it.sessionDemo.example1;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 该servlet是显示所有的图书列表。通过图书后面的购买连接可以把图书添加到购物车中
*
* @author 12428
*
*/
@WebServlet("/ListBookServlet")
public class ListBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public ListBookServlet() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Collection<Book> books = BookDB.getAll();
out.write("本站的图书有:");
for (Book b : books) {
// 将图书的id值作为参数传过去
String url = "/SessionDemo2/PurchaseServlet?id=" + b.getID();
out.write(b.getName() + "<a href='" + url + " '>点击购买</a><br/>");
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

4.创建一个实现购物车功能的servlet类

package cn.it.sessionDemo.example1;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* 该servlet类是用于实现购物车功能,既将用户购买的东西作为session的属性值存进去,再重定向到 到已购买商品的也买你
*
* @author 12428
*
*/
@WebServlet("/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public PurchaseServlet() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获得用户的购买信息
String id = request.getParameter("id");
// 有些用户会直接访问这个Servlet,先判断访问时是否带有书的ID
if (id == null) {
// 如果Id为空,返回图书列表Servlet
String url = "/SessionDemo2/ListBookServlet";
response.sendRedirect(url);
//此处一定要返回,不然会出现错误
return;
} // 获取购买的图书信息
Book book = BookDB.getBook(id);
// 创建session对象
HttpSession session = request.getSession();
// 从session中获得购物车对象
List<Book> cart = (List<Book>) session.getAttribute("cart");
// 判断session对象是否有cart这个属性,如果没有这个属性的话,集合cart的值应为空
if (cart == null) {
// 没有cart属性,用户是首次购买,为用户创建一个购物车
cart = new ArrayList<Book>();
// 将购物车对象添加到session对象中
session.setAttribute("cart", cart);
}
// 将商品放入购物车
cart.add(book); // 创建一个Cookie存放session的信息
Cookie cookie = new Cookie("JSESSION", session.getId());
cookie.setMaxAge(60 * 30);
cookie.setPath("/SessionDemo2");
// 将cookie发送到客户端
response.addCookie(cookie); // 重定向到已购买商品的页面。
String url = "/SessionDemo2/CartServlet";
response.sendRedirect(url);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

5.创建一个展示用户购买信息的类

package cn.it.sessionDemo.example1;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; @WebServlet("/CartServlet")
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public CartServlet() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter(); // 变量cart引用用户的购物车
List<Book> cart = null;
// 创建一个变量是来判断用户是否购买过商品
boolean Flag = true;
// 获得用户的session,如果没有查到也不创建新的session。
HttpSession session = request.getSession(false);
// 如果session为空,Flag为false;
if (session == null) {
Flag = false;
} else {// 不为空,就获得用户的购物车
cart = (List<Book>) session.getAttribute("cart");
// 如果用户的购物车为空,就设置Falg为false。
if (cart == null) {
Flag = false;
} } // 如果Flag为false,表明用户没有购买过商品,重定向到ListServlet页面。
if (!Flag) {
out.write("对不起,你没有购买任何商品");
} else {
// 显示用户的购买信息
out.write("你购买的商品有:");
for (Book b : cart) {
out.write(b.getName() + "<br/>");
} }
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

javaweb学习——session和Cookie实现购物车功能的更多相关文章

  1. 【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能

    Cookie是服务器存放在客户端的一些数据,比如密码,以及你曾经访问过的一些数据. 设置Cookie //设置cookie Cookie cookie = new Cookie("TOM&q ...

  2. javaWeb学习-----session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  3. 【Tomcat】JSP使用Session、Cookie实现购物车

    购物界面shop.jsp 初始页面 添加商品后,在session中设置属性,重定向回到shop.jsp,然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的 ...

  4. django学习,session与cookie

    Cookies,某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明.Cook ...

  5. JavaWeb基础-Session和Cookie

    JSP状态管理 http的无状态性,服务器不会记得发送请求的浏览器是哪一个 保存用户状态的两大机制:session和cookie Cookie:是web服务器保存在客户端的一系列文本信息 作用:对特定 ...

  6. JavaWeb基于session和cookie的数据共享

    在了解session和cookie技术之前,我们需要先了解一下什么是会话?会话可以简单理解为用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程称为一个会话.这样, ...

  7. JavaWeb学习——session总结

    一.session简介 sesion也就是会话,Session对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整 ...

  8. Javaweb学习笔记5—Cookie&Session

    今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...

  9. 工作任务:模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登录功能

    登入界面<% Cookie[] cks =request.getCookies(); String str=null; for(Cookie ck:cks) { if(ck.getName(). ...

随机推荐

  1. 一、JavaScript之第一个实例,点击按钮修改文本内容

    一.代码如下: 二.运行后效果如下 三.点击按钮,"曾经沧海难为水"变成了日期事件了 <!DOCTYPE html> <html> <meta htt ...

  2. JAVA - SpringBoot项目引用MyBatis操作数据库

    JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...

  3. Linux每日练习-crontab

  4. 为什么vue中的data用return返回

    1.为什么在项目中data需要使用return返回数据呢? 不使用return包裹的数据会在项目的全局可见,会造成变量污染:使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件. 当一 ...

  5. 小程序实现textarea行数自动增加

    查找网上案例很多,但是都不是很满意,参考大牛案例终结了一下,话不多说代码如下: 实现效果: 前段代码 <view class="text-box"> <view& ...

  6. arduino双机通信 (解决引脚不够用)

    作用 实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量 中. 接线图 注意 TX 接另一个arduino的 RX !可 ...

  7. vue的开发中v-for报错 [vue/require-v-for-key] Elements in iteration expect to have 'v-bind:key' directives.

    用的VS Code 工具,安装了vetur插件,报错了如下 [eslint-plugin-vue] [vue/require-v-for-key] Elements in iteration expe ...

  8. Codeforces 1296E1 - String Coloring (easy version)

    题目大意: 给定一段长度为n的字符串s 你需要给每个字符进行涂色,然后相邻的不同色的字符可以进行交换 需要保证涂色后能通过相邻交换把这个字符串按照字典序排序(a~z) 你只有两种颜色可以用来涂 问是否 ...

  9. jsch通过SSH2执行linux命令

    public class SSHUtils { private Channel channel; private Session session = null; private int timeout ...

  10. C语言之结构体概述

    C语言之结构体概述1.结构体类型是一种自定义类型(1)C语言中有2种类型:原生类型和自定义类型.2.结构体使用时先定义结构体类型再用类型定义变量(1)结构体定义时需要先定义结构体类型,再用类型来定义变 ...