Sử Dụng HttpSession Tạo ứng Dụng Giỏ Hàng Trong Servlet
Có thể bạn quan tâm
Trong ví dụ này, chúng ta tạo ứng dụng bằng cách viết tất cả dưới dạng servlet. Cấu trúc của ứng dụng chúng ta như sau:

Kết quả thực thi của ứng dụng của chúng ta có kết xuất như sau: 
Bây giờ chúng ta lần lượt các bước tạo ứng dụng:
1> Trong Eclipse J2EE bạn tạo 1 project dạng Dyamic Web Project. Đặt tên cho nó là Servlet_ShoppingCart. Chọn Target Runtime là Apache Tomcat.
2> Tạo đối tượng đặc tả 1 món hàng trong giỏ hàng. Ở đâ, mỗi món hàng đơn giản gồm các thuộc tính: Tên 1 món hàng, giá 1 đơn vị và số lượng của món hàng đó trong giỏ.
Sau đây là code đặc tả cho đối tượng này
| package vovanhai.wordpress.com; public class Monhang { private String ten; private double gia1donvi; private int soluong; @Override public String toString() { return ten+“; “+soluong+“; “+gia1donvi; } public String getTen() { return ten; } public void setTen(String ten) { this.ten = ten; } public double getGia1donvi() { return gia1donvi; } public void setGia1donvi(double gia1donvi) { this.gia1donvi = gia1donvi; } public int getSoluong() { return soluong; } public void setSoluong(int soluong) { this.soluong = soluong; } public Monhang(String ten, double gia1donvi, int soluong) { super(); this.ten = ten; this.gia1donvi = gia1donvi; this.soluong = soluong; } public Monhang() { super(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((ten == null) ? 0 : ten.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Monhang other = (Monhang) obj; if (ten == null) { if (other.ten != null) return false; } else if (!ten.equals(other.ten)) return false; return true; } } |
3> Tạo đối tượng là 1 giỏ hàng. Ở đây ta dùng 1 tập hợp là ArrayList để chứa danh sách các món hàng. Lớp này gồm 1 số phương thức căn bản như thêm món hàng vào giỏ, bỏ hàng khỏi giỏ,…
Code chi tiết như sau:
| package vovanhai.wordpress.com;import java.util.ArrayList; public class Giohang { private ArrayList<Monhang>giohang; public Giohang(){ giohang=new ArrayList<Monhang>(); } /** * Thêm 1 món hàng vào giỏ hàng * @param mh là món hàng cần thêm */ public void ThemMonhang(Monhang mh){ if(giohang.contains(mh)){ Monhang mhang=giohang.get(giohang.indexOf(mh)); mhang.setSoluong(mhang.getSoluong()+mh.getSoluong()); } else{ giohang.add(mh); } } /** * Lấy 1 món * @param i * @return */ public Monhang LayMonHang(int i){ if(i<0||i>giohang.size()–1) return null; return giohang.get(i); } /** * * @return */ public ArrayList<Monhang> getGiohang(){ return giohang; } /** * * @param ten * @return */ public boolean XoaMonHang(String ten){ Monhang mh=new Monhang(ten,0d,0); if(!giohang.contains(mh)) return false; giohang.remove(mh); return true; } /** * * @return */ public int soMonHang(){ return giohang.size(); } /** * * @return */ public double tongtien(){ double t=0d; for(Monhang mh:giohang) t+=mh.getGia1donvi()*mh.getSoluong(); return t; } } |
4> Ta tạo trang cho khách hàng lựa chọn hàng và số lượng mua.
Đầu tiên ta dùng biến HttpSession để đọc 1 biến session có tên “giohang”. Nếu lần đầu ghé thăm thì biến session này sẽ rỗng, còn không thì chúng ta sẽ đọc các mẫu tin trong giỏ hàng và xuất nó ra trên table.
Code cho lớp này như sau:
| package vovanhai.wordpress.com;import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;public class EShop extends HttpServlet { private Giohang gh=null; public EShop() { super(); gh=new Giohang(); } public void init(ServletConfig config) throws ServletException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html;charset=UTF-8”); PrintWriter out = response.getWriter(); double tongtien=0d; try { HttpSession session = request.getSession(true); out.println(“<html>”); out.println(“<head>”); out.println(“<title>Shopping Cart demo with servlet</title>”); out.println(“</head>”); out.println(“<body>”); out.println(“<h1 align=\”center\”>CHÀO MỪNG ĐẾN VỚI GIAN HÀNG TRÁI CÂY</h1>”); out.println(“<form action=\”Xuly\” method=\”post\”>”); out.println(“<p>Chọn mặt hàng:<select name=\”cbohang\”>”); out.println(“<option>Xoài tượng</option>” + “<option>Cóc dầm chua ngọt</option>” + “<option>Mít tố nữ</option>” + “<option>Mận ngọt Thái Lan</option>” + “<option>Me dốt</option>”); out.println(“</select>Số lượng<input type=\”text\” name=\”tfSoluong\” value=\”1\”>”); out.println(“</p>”); out.println(“<input type=\”submit\” value=\”Mua Hàng\”>”); out.println(“<h2 align=\”center\”>THÔNG TIN GIỎ HÀNG</h2>”); out.println(“<table width=\”80%\” border=\”1\”><tr>”+ “<td>STT</td><td>Tên Sản phẩm</td><td>Số lượng</td>” + “<td>Đơn giá</td><td>Thành tiền</td>”+ “</tr>”);vovanhai.wordpress.com.Giohang gh=(vovanhai.wordpress.com.Giohang)(session.getAttribute(“giohang”)); if(gh!=null){ tongtien=gh.tongtien(); for(int i=0;i<=gh.soMonHang()–1;i++){ vovanhai.wordpress.com.Monhang mh=gh.LayMonHang(i); out.println(“<tr><td>”+i+“</td><td>”+mh.getTen()+“</td><td>”+ mh.getSoluong()+“</td><td>”+mh.getGia1donvi()+“</td>”+ “<td>”+mh.getSoluong()*mh.getGia1donvi()+“</td>”+ “</tr>”); } out.println(“”); out.println(“”); } out.println(“</table>”); out.println(“<h2>Tổng tiề:”+tongtien+” đồng</h2>”); out.println(“”); out.println(“</form>”); out.println(“</body>”); out.println(“</html>”); } finally { out.println(“</html>”); out.close(); } } } |
5> Khi người dùng nhấn nút mua hàng ta sẽ gọi đến 1 servlet có tên là Xuly để thao tác với giỏ hàng. Sau khi xử lý xong servlet này sẽ chuyển trang lại cho trong EShop ở bước 4.
Code cho lớp này như sau:
| package vovanhai.wordpress.com; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class Xuly extends HttpServlet { /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html;charset=UTF-8”); PrintWriter out = response.getWriter(); try { HttpSession session = request.getSession(true); vovanhai.wordpress.com.Giohang gh=(vovanhai.wordpress.com.Giohang)(session.getAttribute(“giohang”)); if(gh==null) gh=new Giohang(); String hang=request.getParameter(“cbohang”); String sl=request.getParameter(“tfSoluong”); int soluong=Integer.parseInt(sl); if(soluong>0){ double gia=Tinhgia(hang); Monhang mh=new Monhang(hang,gia,soluong); gh.ThemMonhang(mh); session.setAttribute(“giohang”, gh); //System.out.println(mh); } RequestDispatcher rd=request.getRequestDispatcher(“EShop”); rd.forward(request, response); } finally { out.close(); } } private double Tinhgia(String sp){ if(sp.startsWith(“Xoà i”))return 10000; if(sp.startsWith(“Cóc”))return 7000; if(sp.startsWith(“MÃt”))return 16500; if(sp.startsWith(“Máºn”))return 8000; return 4000;//me } /** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } |
6> Nếu đến đây chúng ta thự thi ứng dụng thì việc hiển thị tiếng Việt sẽ có lỗi xảy ra. Để giải quyết vần đề này ta dùng 1 Filter để qui định charset là UTF-8.
Code cho filter này như sau:
| package vovanhai.wordpress.com; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class UTF8Filter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(“UTF-8”); chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { } } |
7> Cấu hình web.xml
| <?xml version=”1.0″ encoding=”UTF-8″?> <web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” id=”WebApp_ID” version=”2.5″><servlet> <servlet-name>EShop</servlet-name> <servlet-class>vovanhai.wordpress.com.EShop</servlet-class> </servlet> <servlet> <servlet-name>Xuly</servlet-name> <servlet-class>vovanhai.wordpress.com.Xuly</servlet-class> </servlet> <servlet-mapping> <servlet-name>EShop</servlet-name> <url-pattern>/EShop</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Xuly</servlet-name> <url-pattern>/Xuly</url-pattern> </servlet-mapping> <filter> <filter-name>utf</filter-name> <filter-class>vovanhai.wordpress.com.UTF8Filter</filter-class> </filter> <filter-mapping> <filter-name>utf</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> |
Thực thi ứng dụng bằng cách chạy Servlet EShop trong eclipse hoặc sau khi triển khai ứng dụng ta vào url: http://localhost:8080/Servlet_ShoppingCart/EShop
Kết quả sau vài thao tác mua hàng như sau 
Chúc thành công!
Share this:
- X
Từ khóa » Hàm Session Trong Jsp
-
Đối Tượng Session Trong JSP - Học Jsp Miễn Phí Hay Nhất - VietTuts
-
Tìm Hiểu Về Session Trong Jsp, Servlet (Java Web) - Site Title
-
Khởi Tạo Session Trong Java Servlet/jsp - Bài 4
-
Session Tracking Trong JSP - Hoclaptrinh
-
Session Và HttpSessionListener | LongKa Blog
-
Đếm Số Người Online Trong JSP | Zstar's Blog
-
[Servlet/JSP] Lập Trình Java Servlet Cơ Bản P6: Phiên Làm Việc ...
-
7 Bước Tạo Chức Năng Login / Logout Với JSP & Servlet
-
Refresh JSP Session Value - Stack Overflow
-
SE403 Flashcards | Quizlet
-
Java Server Pages (JSP) - HKT SOFT
-
Tạo Một ứng Dụng Login đơn Giản Và Bảo Mật Với Java Servlet Filter
-
JSP – Wikipedia Tiếng Việt
-
Lập Trình Web Với Java: Cấu Hình Và Cài Đặt (Phần 1) - CodeLearn