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. spark-submit脚本分析

    执行任务 ./spark-submit \ --class cn.com.dtmobile.spark.DebugTest \ --master yarn \ --deploy-mode client ...

  2. 如何有效避免Essay写作抄袭

    每到学期末的时候,各种考试,论文以及作业数不胜数,压得留学党们快要喘不过气了.我想比起写论文,同学们更操心的问题应该是:Plagiarism.要知道在国外Plagiarism的这种行为在学术中是零容忍 ...

  3. 用Git管理项目进行版本控制

    一.安装 1.1windows 要在Windows系统中安装Git,请访问http://msysgit.github.io/,并单击Download.安装. 1.2 在 Linux 系统中安装 Git ...

  4. 吴裕雄--天生自然C++语言学习笔记:C++ 命名空间

    假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等. 同样的情况也出现在 C++ 应用程 ...

  5. 本地的jar包导入到maven仓库

    需要引入本地jar,然后百度跟着教程实现了,做个记录加深印象.https://www.cnblogs.com/lixuwu/p/5855031.html 1首先找到要传入maven的jar包(放在一个 ...

  6. c++程序—switch分支

    #include<iostream> using namespace std; #include<string> int main() { //多元分支 cout <&l ...

  7. python--txt文件处理

    1.打开文件的模式主要有,r.w.a.r+.w+.a+ file = open('test.txt',mode='w',encoding='utf-8') file.write('hello,worl ...

  8. 通过Navicat Premium 实现Oracle的连接和基本操作

    一.Oracle的连接 以下为Navicat Premium连接Oracle数据库的教程 一.需要准备的软件(下载适合自己系统的软件) 1.Navicat premium 官方下载地址:http:// ...

  9. Redis高级用法

    第一章 redis初识 1.1 Redis是什么 介绍 开源:早起版本2w3千行 基于键值对的存储系统:字典形式 多种数据结构:字符串,hash,列表,集合,有序集合 高性能,功能丰富 那些公司在用 ...

  10. 洛谷 P5663 加工零件

    题目传送门 解题思路: 最暴力的做法: bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下 ...