javaweb學習——session和Cookie實現購物車功能


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);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM