实验名称:
Session实现购物车
实验目的:
(1)掌握什么是Cookie对象,掌握Cookie对象的使用
(2)掌握什么是Session对象,掌握Session对象的使用
(3)掌握使用Session对象实现购物车功能
实验内容及原理:
使用Session对象实现购物车功能
购物车的实现流程如下:
要求在Java web项目里,创建Book.java类封装图书信息;模拟数据库BookDB 类,保存图书信息;购买页面类ListBookServlet,用于显示所有可购买图书的列表;添加购物车类PurchaseServlet;回显购物车图书信息类CartServlet,使用Session对象实现购物车功能。
实验设备及实验步骤:
Win10操作系统+JDK软件+Eclipse软件+Apache-tomcat软件
1、创建封装图书信息类Book.java。
package com.example.BookSession;
public class Book {
public String id;
public String name;
public Book(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2、创建模拟数据库BookDB 类,保存图书信息。
package com.example.BookSession;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
public class BookDB {
//模拟数据库
private static Map<String,Book> map =new LinkedHashMap<String,Book>();
static {
map.put("1", new Book("1","活着"));
map.put("2", new Book("2","瓦尔登湖"));
map.put("3", new Book("3","人性的弱点"));
map.put("4", new Book("4","麦田里的守望者"));
map.put("5", new Book("5","月亮与六便士"));
map.put("6", new Book("6","围城"));
}
//1.提供一个得到图书的方法
public static Collection<Book> getAll(){
return map.values();
}
//2.根据map的key,也就是图书id,得到图书
public static Book getBook(String id) {
return map.get(id);
}
}
3、提供图书的购买页面类ListBookServlet,用于显示所有可购买图书的列表。(15分)
package com.example.BookSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 提供一个图书的界面
*/
public class ListBookServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 处理中文乱码
response.setContentType("text/html;charset=utf-8");
//1.得到所有图书
Collection<Book> books = BookDB.getAll();
//2.图书回显到页面
PrintWriter out = response.getWriter();
out.print("以下是本网站所售卖的所有图书:"+"<br/><br/>");
//3.遍历集合,图书显示
for(Book b :books) {
//4.得到图书的名称
String url = "PurchaseServlet?id="+b.getId();
out.print("图书名称 : 《"+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、创建添加购物车类PurchaseServlet。(15分)
package com.example.BookSession;
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;
/**
* 添加购物车
*/
public class PurchaseServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 处理中文乱码
response.setContentType("text/html;charset=utf-8");
//1.获取图书信息
String id = request.getParameter("id");
//判断id是否存在
if(id==null) {
//没有 购买图书
response.sendRedirect("ListBookServlet");
return;
}
System.out.println();
//2.图书已经购买
Book book = BookDB.getBook(id);
//3.把图书添加至购物车
HttpSession session = request.getSession();
List<Book> list = (List<Book>) session.getAttribute("cart");
//4.判断购物车是否存在:是不是首次购买图书
if(list==null) {//首次购买
//创建购物车
list = new ArrayList<Book>();
//把购物车放进session
session.setAttribute("cart", list);
}
//5.把图书添加到购物车
list.add(book);
//6.把请求跳转到CartServlet
//session基于自己创建的cookie完成效果:在浏览器关闭后,cookie对象还存在目的
Cookie cookie = new Cookie("JESSIONID", session.getId());
cookie.setMaxAge(60*30);//1h
cookie.setPath("/chapter05.session");
response.addCookie(cookie);
//跳转到cartServlet里面
response.sendRedirect("CartServlet");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5、创建回显购物车图书信息类CartServlet。(20分)
package com.example.BookSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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 CartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
// 处理中文乱码
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//1.得到购物车
List<Book> cart = null;
//2.得到用户自己的session
HttpSession session = request.getSession(false);
//3.自己定义一个标识,判断购物车里面是否有图书
boolean cartFlag = true;
if(session==null) {//购物车没有图书
cartFlag = false;
}
else {
cart = (List<Book>) session.getAttribute("cart");
if(cart==null) {
cartFlag=false;
}
}
//4.判断购物车有商品
if(!cartFlag) {//没有书
out.print("对不起,您的购物车没有图书,请去购买。");
}
else {
//有图书,遍历图书
out.print("购买图书如下: "+"<br/>");
for(Book b:cart) {
out.print("购买的图书:"+b.getName()+"<br/>");
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
}
}
6、运行结果图截图:(10分)
问题及思考:(10分)
掌握了什么是Cookie、Session对象和其使用并运用Session对象实现购物车功能。在完成该项目时遇到了如何模拟数据库的问题,通过建立map,成功模拟出。在开发过程中,使用ServletContext对象保存商品信息是可以的,但是不合理,所以保存会话过程中产生的数据,采用会话管理技术,也就是使用cookie和session技术来保存会话过程产生的数据。