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