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