Session Tracking Trong ứng dụng bán hàng trực tuyến, nhiều khách hàng thực hiện mua hàng.. Mỗi khách hàng có một giỏ hàng riêng biệt.. Mỗi khách hàng thực hiện các thao tác như thêm
Trang 1SERVLET SESSION TRACKING
CHUYÊN ĐỀ JAVA
Nguyễn Hoàng Anh Email: nhanh@fit.hcmus.edu.vn
hoanganhis@gmail.com
ĐH KHTN, 2011
Trang 2Nội dung trình bày
Session Tracking
Cài đặt Session Tracking
– Servlet Session API
Xây dựng BookOnline
– Đăng nhập
– Quản lý giỏ hàng
Trang 3Session Tracking
Trong ứng dụng bán hàng trực tuyến, nhiều khách hàng thực hiện mua hàng Mỗi khách hàng có một giỏ hàng riêng biệt
Mỗi khách hàng thực hiện các thao tác như thêm sản phẩm vào giỏ hàng, xóa sản phẩm khỏi giỏ hàng, cập nhật số lượng mua, tiếp tục mua hàng, thanh toán…
Để thực hiện mỗi thao tác của từng khách hàng làm sao server biết được các sản phẩm hiện có trong giỏ hàng của khách hàng đó?
Trang 4Session Tracking
Cần cơ chế duy trì trạng thái của các request từ cùng một người dùng (hoặc có nguồn gốc cùng một browser) trong một khoảng thời gian
Tuy nhiên HTTP là giao thức phi trạng thái (stateless)
– Mỗi lần client kết nối đến server đều mở ra một kết nối mới
– Server không tự động duy trì trạng thái của một user
Trang 5Session Tracking
Server Client 1
Client 2
Session ID 1
Session ID 2
Session 1
Session 2
Trang 6Session Tracking
Cài đặt Session Tracking sử dụng
– Servlet Session API
Trang 7Session Tracking – Servlet Session API
Lấy đối tượng session
HttpSession session = request.getSession();
Lấy dữ liệu:
Object obj = session.getAttribute(String name);
Lưu trữ dữ liệu vào session
session.setAttribute(String name, Object obj)
Xóa dữ liệu session theo tên
session.removeAttribute(String name)
Xóa toàn bộ dữ liệu trong session : session.invalidate()
Kiểm tra session được tạo mới từ client:
boolean ok = session.isNew()
Trang 8Session Tracking – Servlet Session API
Lấy session id: String id = session.getId()
Lấy các tên của các thuộc tính từ session
Enumeration<String> names = session.getAttributeNames()
Lấy thời gian tạo session lần đầu tiên
long time = session.getCreationTime();
Lấy thời gian truy xuất session lần cuối
long time = session.getLastAccessedTime();
Gán/lấy thời gian session timeout
session.setMaxInactiveInterval(int interval);
int interval = session.getMaxInactiveInterval();
Trang 9Session Tracking – Servlet Session API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Lưu trữ dữ liệu
HttpSession session = request.getSession ();
SomePOJO data= ;
session.setAttribute (" SomeName ", data);
//Lấy dữ liệu
HttpSession session = request.getSession();
if( session.getAttribute (“ SomeName ”)!=null){
}
//Xóa dữ liệu
HttpSession session = request.getSession ();
session.removeAttribute (“ SomeName ”);
//Xóa tất cả dữ liệu trong session
HttpSession session = request.getSession ();
session.invalidate ();
Trang 10Session Tracking – Servlet Session API
1
2
3
4
5
6
7
8
HttpSession session = request.getSession ();
synchronized (session){
session.setAttribute( );
session.getAttribute( );
session.removeAttribte( );
session.invalidate( );
}
- Synchronized : xử lý đồng bộ giữa các request đến từ cùng một user
- Thường sử dụng trong ứng dụng ajax
Trang 11Servlet Session API – Access Count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HttpSession session = request.getSession();
synchronized (session) {
Integer accessCount;
if (session.getAttribute( "AccessCount" ) != null) {
accessCount = (Integer)
session.getAttribute( "AccessCount" ) + 1;
} else {
accessCount = 1;
}
session.setAttribute( "AccessCount" , accessCount);
out.println( "<html>" );
out.println( "<head>" );
out.println( "<meta http-equiv='Content-Type'
content='text/html; charset=utf-8' />" );
out.println( "<title>Show Session</title>" );
out.println( "</head>" );
out.println( "<body>" );
out.println( "<h1 align='center'>THÔNG TIN SESSION</h1>");
Trang 12Servlet Session API – Access Count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
out.println( "<table width='400' border='1' align='center'
cellpadding='0' cellspacing='0'>" );
out.println( " <tr bgcolor='#00FFFF'>" );
out.println( " <td><strong>Thông tin</strong></td>" ); out.println( " <td><strong>Giá tr?</strong></td>" );
out.println( " </tr>" );
out.println( " <tr>" );
out.println( " <td width='40%'>ID</td>" );
out.println( " <td>" + session.getId() + "</td>" );
out.println( " </tr>" );
out.println( " <tr>" );
out.println( " <td>Thời gian tạo lần đầu tiên</td>" ); out.println( " <td>" + new
Date(session.getCreationTime()) + "</td>" );
out.println( " </tr>" ); out.println( " <tr>" );
out.println( " <td>Thời gian truy cập lần cuối </td>" ); out.println( " <td>" + new
Date(session.getLastAccessedTime()) + "</td>" );
out.println( " </tr>" );
Trang 13Servlet Session API – Access Count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
out.println(" <tr>");
out.println(" <td>Thời gian timeout</td>"); out.println(" <td>" +
session.getMaxInactiveInterval() + "</td>");
out.println(" </tr>");
out.println(" <tr>");
out.println(" <td>Số lần truy cập</td>"); out.println(" <td>"+accessCount + "</td>"); out.println(" </tr>");
out.println("</table>");
out.println("</body>");
out.println("</head>");
out.println("</html>" );
Trang 14Servlet Session API – Access Count
Trang 15BookOnline – Các chức năng
Cho phép khách hàng quản lý giỏ hàng của mình
– Xem giỏ hàng
– Thêm sách vào giỏ hàng
– Xóa một số đầu sách trong giỏ
– Cập nhật số lượng sách mua
– Xóa tất cả các sách trong giỏ
– Thanh toán giỏ hàng
– Xem các đơn đặt hàng đã mua
Trang 16BookOnline – Use case
DuaSachVaoGioHang
XemGioHang
XoaMotSoDauSachKhoiGioHang
CapNhatSoLuongSach TrongGioHang
ThanhToan
<<extend>>
<<extend>>
<<extend>>
KhachHang
XemDanhSachDonDatHang
XemChiTietDonDatHang
<<extend>>
Trang 17BookOnline – Cơ sở dữ liệu
Trang 18Tài liệu tham khảo
Nguyễn Hoàng Anh, Tập bài giảng và video môn chuyên đề Java, 2010
Marty Hall, Tập bài giảng về Servlet, 2010
– http://courses.coreservlets.com/Course-Materials/csajsp2.html
Trang 19HỎI VÀ ĐÁP