MONDAY, 1. MARCH 2010, 16:51:24
JSP
Đây là bài Assignment môn Web Programming with Servlets and JSP môn đầu tiên SEM IV của giáo trình ICCP 2007 Aptech của mình. Nó demo về một hệ thống shopping cart online (Đặt hàng trực tuyến) với mô hình MVC của Java.
Assignment viết thuần JSP witch MVC không hề sử dụng Framework, do vậy đây mang tính chất demo cho các bạn đang học JSP và tìm hiểu về mô hình MVC cũng như hệ thống Shopping cart online đơn giản.
Còn đây là mã nguồn:
http://www.mediafire.com/?yo1mbon1ndb
Chú ý: Restore lại database trong thư mục StoreProcedure/NamVTProject.bak, vào file DAO.java trong packet dal/DAO.java sửa lại thông số SQL.
Các phần mềm sử dụng:
- IDE: Netbeans 6.8.
- JDK 6 update 18.
- DBMS: Microsoft SQL Server 2005.
Công nghệ sử dụng:
- J2EE 5, MS SQL 2005
- HTML, CSS, JQuerry
Tác giả: Vũ Thành Nam
Sau đây là các bảng của CSDL.
- Bảng Admin chứa thông tin của người quản trị.
- Bảng Customer chứa thông tin của khách hàng.
- Bảng Product chứ thông tin sản phẩm.
- Bảng Order và Order Details chứa thông tin về đơn hàng. Hai bảng này có quan hệ một - nhiều.
+ Bảng Order chứa các thông tin chung của một đơn hàng như ID của khách hàng, tổng số tiền.
+ Bảng Order details để lưu thông 1 sản phẩm của đơn hàng như ID sản phẩm, tổng giá và số lượng. Một bảng Order có thể có nhiều bảng Order (cũng như 1 đơn hàng có nhiều sản phẩm).
Tiếp theo đây mình xin trình bầy cơ bản hệ thống Shopping Cart.
Đầu tiên ta xây dựng một lớp ProductItem nó chứa các thông tin của một sản phẩm.
Sau đó ta tiến hành xây dựng lớp Shopping Cart chứa dữ liệu của giỏ hàng cũng như những thao tác như update, xóa hay tạo mới một giỏ hàng.
Nó gồm 1 List các ProductItems
ArrayList
Và gồm các hàm để thao tác như
Tạo mới:
public void addItems(ProductItem products){
int status = 0;
for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
if(products.getProdID() == temp.getProdID()){
items.get(i).setQuantity(items.get(i).getQuantity() + 1);
status = 1;
return;
}
}
if(status == 0){
products.setQuantity(1);
}
items.add(products);
}
Chú ý:
if(products.getProdID() == temp.getProdID())
để kiểm tra xem sản phẩm đó đã được add vào giỏ hàng hay chưa nếu rồi thì cộng tổng số sản phẩm có trong giỏ hàng lên 1, nếu chưa thì set số sản phẩm là 1.
- Xóa 1 sản phẩm khỏi giỏ hàng:
// remove a product in list
public void removeItems(int ID){
for(int i = 0; i <= items.size(); i++){
ProductItem temp = items.get(i);
if(temp.getProdID() == ID){
items.remove(i);
return;
}
}
}
- Và các hàm như update số lượng sản phẩm, lấy tổng số tiền hay lấy tổng số sản phẩm có trong giỏ hàng, và làm rỗng giỏ hàng.
// update quantity for product
public void updateItems(int ID, int newQuantity) {
for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
if(temp.getProdID() == ID){
items.get(i).setQuantity(newQuantity);
}
}
}
// get total Price in list product
public double totalPrice(){
double price = 0;
for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
price += temp.getPrice();
}
return price;
}
// get total Quantity in list product
public double totalQuantiy(){
double total = 0;
for(int i = 0; i < items.size(); i++){
ProductItem temp = items.get(i);
total = total + temp.getQuantity();
}
return total;
}
// remove all list
public void Clear(){
items.clear();
}
OK vậy là ta đã có hai đối tượng để thao tác với giỏ hàng. Vấn đề ở đây là add vào giỏ hàng như thế nào thôi.
Đây là Servlet để xử lý phần add vào giỏ hàng.
Đầu tiên ta phải lấy các request trả về từ Views như ID sản phẩm, tên sản phẩm hay giá sản phẩm ....
int quantity = 1;
int prodID = Integer.parseInt(request.getParameter("ProductID"));
String prodName = request.getParameter("ProductName");
double price = Double.parseDouble(request.getParameter("Price"));
Tiếp theo là khởi tạo một đối tượng ProductItem gồm có những thông số như trên
ProductItem products = new ProductItem(prodID, prodName, price, quantity);
OK vậy là ta đã có thông tin của đối tượng việc còn lại là khởi tạo một biến session để lưu thông tin của sản phẩm.
if(session.getAttribute("Cart") == null){ // Kiểm tra xem đã tồn tại session chưa
ShoppingCart cart = new ShoppingCart();
cart.addItems(products); //Thực hiện add product vào đối tượng Shopping Cart
session.setAttribute("Cart", cart);//Tạo session mới có tên là Cart và chứa thông tin của sản phẩm.
}
else{ // Nếu session đã tồn tại thì ta lấy dữ liệu của session vào cho đối tương Shopping Cart
ShoppingCart cart = (ShoppingCart)session.getAttribute("Cart");
cart.addItems(products); //Và tiếp tục add một sản phẩm mới vào.
}
Vậy là ta đã add được một sản phẩm vào giỏ hàng, các phần còn lại như update, xóa 1 sản phẩm, hay làm rỗng giỏ hàng ta tiến hành tương tự.
Việc tiếp theo của ta là insert vào database thông tin của giỏ hàng.
Ta thực hiện như sau:
Đầu tiên ta phải thực hiện insert vào bảng Order (chứa thông tin tổng quát của đơn hàng của khách).
Order EO = new Order();
EO.setCustomerID(CustomerID);
EO.setTotalMoney(totalPrice);
EO.setState(0);
EO.setNote("hello");
OrderBO OOder = new OrderBO();
OOder.addOrder(EO);
Giờ việc cuối cùng là insert các thông tin chi tiết của đơn hàng (gồm thông tin khách hàng, các sản phẩm khách đặt mua)
Việc đầu tiên là ta phải lấy ID của bảng Order vừa insert bằng cách mấy ID lớn nhất của Order (vì ID đc insert tự động theo chế độ identity (tự tăng 1 đơn vị và đơn vị đầu tiên bằng 1).
int MaxID = OOder.MaxIDOrder();
Sau đó ta phải lấy toàn bộ chi tiết đơn hàng thông qua biến session Cart.
ShoppingCart Cart = (ShoppingCart)session.getAttribute("Cart");
List
Việc còn lại là insert vào bảng Order Details
NamVTProject.ProductItem p;
OrderDetails EOD = new OrderDetails();
OrderDetailsBO BOD = new OrderDetailsBO();
//Lặp toàn bộ danh sách của giỏ hàng sau đó lần lượt insert và các bảng Order Details.
for (int i = 0; i < cProduct.size();i++) {
p = cProduct.get(i);
EOD.setOrdersID(MaxID);
int pri = (int) p.getPrice();
EOD.setPrice(pri);
EOD.setProductID(p.getProdID());
EOD.setQuantity(p.getQuantity());
BOD.addOrder(EOD);
}
Trên đây là mình trình bầy một cách tổng quát nhất về hệ thống Shopping Cart, các bạn có thể down mã nguồn về để xem có gì thắc mắc cứ post bài thoải mái tại đây.
Best regards !
Một vài Screenshot