# 簡易購物車
? ? 就是一個簡單的購物車,還可以擴展。
實現原理:
????用戶在ShowBook頁面購書,BuyBookCl進行業務邏輯處理之后,顯示在ShowMyCart上。Book是圖書信息類,DB是一個內存圖書數據庫,用來存放初始化圖書信息。
?
使用技術:
1、JAVASE中的ArrayList,HashMap,LinkedHashMap
2、Session技術
3、Servlet技術
4、單例
?
~~~
package com.pc;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Switch
* 功能:顯示圖書
*/
public class ShowBook extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 字符編碼
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println("<h1>歡迎購買</h1>");
// 取出DB
ArrayList<Book> db = DB.getBooks();
for(Book book : db){
out.println(book.getName() + "<a href='/MyCart/BuyBookCl?id="+ book.getId() + "&name=" + book.getName() + "&price=" + book.getPrice() + "'>點擊購買</a><br/>");
}
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
~~~
~~~
package com.pc;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Switch
* 功能:處理購書信息
*/
public class BuyBookCl extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 字符編碼
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
// 接收用戶購書信息
String bookname = request.getParameter("name");
String id = request.getParameter("id");
String price = request.getParameter("price");
// 從會話獲取總價
Float totalprice = (Float) request.getSession().getAttribute("totalprice");
// 將總價加入會話中
if(totalprice == null){
request.getSession().setAttribute("totalprice", Float.parseFloat(price));
} else {
request.getSession().setAttribute("totalprice", totalprice + Float.parseFloat(price));
}
// 從session中取出mybooks
HashMap<String, Book> books = (HashMap<String, Book>) request.getSession().getAttribute("mybooks");
// 如果是第一次購物 books == 空
if(books == null){
// 創建集合對象
books = new LinkedHashMap<String, Book>();
// 創建book對象
Book book = new Book();
book.setId(id);
book.setName(bookname);
// 設置圖書數量為1
book.setNum(1);
books.put(id, book);
// 將bookd加入session
request.getSession().setAttribute("mybooks", books);
} else {
// 檢測集合中是否有該書
if(books.containsKey(id)){
// 表示數已被購買過
// 從集合中取出圖書
Book book = books.get(id);
// 數量+1
book.setNum(book.getNum() + 1);
} else {
// 該圖書未被購買過
Book book = new Book();
book.setId(id);
book.setName(bookname);
book.setNum(1);
books.put(id, book);
}
}
// 轉發到顯示購物車界面
request.getRequestDispatcher("/ShowMyCart").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
~~~
~~~
package com.pc;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Switch
* 功能:顯示購物車
*/
public class ShowMyCart extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 字符編碼
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
// 從session中取出購買的書
HashMap<String, Book> books = (HashMap<String, Book>) request.getSession().getAttribute("mybooks");
// 測試
// System.out.println(books);
out.println("您的購物車有以下書籍:<br/>");
Iterator iterator = books.keySet().iterator();
while(iterator.hasNext()){
Book book = books.get(iterator.next());
out.println("書名為:" + book.getName() + " 數量為:" + book.getNum());
out.println("<br/>");
}
out.println("總價為:" + request.getSession().getAttribute("totalprice"));
out.println("<br/>");
out.println("<a href='/MyCart/ShowBook'>返回購物大廳</a>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
~~~
~~~
package com.pc;
/**
* @author Switch
* 功能:存儲圖書信息
* id------id號
* name----書名
* num-----數量
* price---價格
*/
public class Book {
private String id;
private String name;
private int num;
private float price;
// 設置器與獲取器
public String getId() {
return id;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
~~~
~~~
package com.pc;
import java.io.Serializable;
import java.util.ArrayList;
/**
*
* @author Switch
* 功能:模擬內存數據庫,單例實現
*
*/
public final class DB implements Serializable{
private static ArrayList<Book> books = null;
private DB(){
}
// 靜態代碼塊初始化圖書信息
static{
books = new ArrayList<Book>();
Book book1 = new Book();
book1.setId("1");
book1.setName("Think in Java");
book1.setPrice(99);
books.add(book1);
Book book2 = new Book();
book2.setId("2");
book2.setName("Javascript權威指南");
book2.setPrice(139);
books.add(book2);
Book book3 = new Book();
book3.setId("3");
book3.setName("Head First Servlet & JSP");
book3.setPrice(129);
books.add(book3);
Book book4 = new Book();
book4.setId("4");
book4.setName("設計模式之禪");
book4.setPrice(89);
books.add(book4);
Book book5 = new Book();
book5.setId("5");
book5.setName("Java核心技術");
book5.setPrice(139);
books.add(book5);
}
// 返回圖書集合
public static ArrayList<Book> getBooks() {
return books;
}
}
~~~
?
----------參考《韓順平.細說Servlet》