1. 程式人生 > >javaweb學習總結 Session案例——實現購物車

javaweb學習總結 Session案例——實現購物車

以購買圖書為例,使用session模擬實現購物車,定義了5個類:

(1)Book類:此類用於封裝圖書的資訊,定義id和name屬性,分別表示編號和名稱

(2)BookDB類:模擬儲存所有圖書的資料庫,此類實現時通過Map集合儲存了5個不同的Book物件,提供了指定圖書和所有圖書的相關方法

(3)ListBookServlet:顯示所有可購買圖書的列表,通過單擊購買連結,即可將指定圖書加入購物車

(4)PurchaseServlet:此類有兩個功能:一是將使用者購買的圖書資訊儲存到session物件中去,二是使用者購買圖書結束後,將頁面重定向到使用者已經購買的圖書列表

(5)CartServlet:購物車類   用於展示使用者購買的圖書列表

package cn.edu.bdu.mc02;
/*
 * 此類用於封裝圖書的資訊,定義id和name屬性,分別表示編號和名稱
 */
public class Book {
    private String id;
    private 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;
    }     
}

----------------------------------------------------------------------------------------------------------------------------

package cn.edu.bdu.mc02;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/*模擬儲存所有圖書的資料庫
 * 此類實現時通過Map集合儲存了5個不同的Book物件,提供了指定圖書和所有圖書的相關方法 
 */
public class BookDB {
    private static Map<String,Book>books=new LinkedHashMap<String,Book>();
    static{
        books.put("1", new Book("1","java開發"));
        books.put("2", new Book("2","java基礎"));
        books.put("3", new Book("3","java1"));
        books.put("4", new Book("4","java2"));
        books.put("5", new Book("5","java3"));
    }
    //獲取所有的圖書
    public static Collection<Book>getAll(){
        return books.values();
    }
    //根據指定的id獲取圖書
    public static Book getBook(String id) {
        return books.get(id);        
    }
}
 

---------------------------------------------------------------------------------------------------------------------------------------------

package cn.edu.bdu.mc02;
/*
 * 顯示所有可購買圖書的列表,通過單擊購買連結,即可將指定圖書加入購物車
 */
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 implementation class ListBookServlet
 */
@WebServlet("/ListBookServlet")
public class ListBookServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    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.print("本站提供的書有:");
        for(Book book:books){
            String url="/chapter006/PurchaseServlet?id="+book.getId();
            out.write(book.getName()+"<a href='"+url+"'>點選購買</a><br>");
        }
        String url="/chapter006/PurchaseServlet";
        out.print("<a href='/chapter006/CartServlet'>我的購物車</a><br>");
    }

    /**
     * @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);
    }

}
-----------------------------------------------------------------------------------------------------------------------------------------------------------

package cn.edu.bdu.mc02;
/*
 * 此類有兩個功能:一是將使用者購買的圖書資訊儲存到session物件中去,二是使用者購買圖書結束後,將頁面重定向到
 * 使用者已經購買的圖書列表
 * 
 * 
 * cart   第二次瀏覽的時候  cart已經存在
 *
 */
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 implementation class PurchaseServlet
 */
@WebServlet("/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PurchaseServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //獲得使用者購買的商品
        String id=request.getParameter("id");
        if(id==null){
            //如果id為空就重定向到ListBookServlet
            String url="/chapter006/ListBookServlet";
            response.sendRedirect(url);
            return;
        }
        Book book=BookDB.getBook(id);
        //建立或者獲得使用者的Session物件
        HttpSession session=request.getSession();
        //從session物件中獲得使用者的購物車
        //List<Book>cart =(List)session.getAttribute("cart");
        List<Book>cart=(List<Book>)session.getAttribute("cart");
        if(cart==null){
            //首次購買,為使用者建立一個購物車(List集合模擬購物車)
            cart=new ArrayList<Book>();
            //將購物車存入session物件
            session.setAttribute("cart", cart);
        }
        //將商品放入購物車
        cart.add(book);
        //建立cookie存放session的標識號
        Cookie cookie=new Cookie("JESSIONID", session.getId());
        cookie.setMaxAge(60*30);
        cookie.setPath("/chapter006");
        response.addCookie(cookie);
        //重定向到購物車頁面
        String url="/chapter006/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);
    }

}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

package cn.edu.bdu.mc02;
/*
 * 用於展示使用者購買的圖書列表
 */
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;

/**
 * Servlet implementation class CartServlet
 */
@WebServlet("/CartServlet")
public class CartServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CartServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        HttpSession session=request.getSession(false);
        
        List <Book> cart=(List)session.getAttribute("cart");
        
        if(cart!=null&&cart.size()>0){
            out.print("您購買的圖書有:");
            out.print("<a href='/chapter006/ListBookServlet'>圖書列表</a><br>");
            for(Book book:cart){
                out.print(book.getName()+"<br>");
            }
        }
        else{
            out.print("對不起您還沒有購買圖書!");
            out.print("<a href='/chapter006/ListBookServlet'>圖書列表</a><br>");
            
        }
    }

    /**
     * @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);
    }

}