Java Web——Session实现购物车

前端 0

实验名称:

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技术来保存会话过程产生的数据。

也许您对下面的内容还感兴趣: