CHUYÊN ĐỀ JAVASERVLET SESSION TRACKING • Lâm Thị Xuân Thanh • Đỗ Xuân Thiện • Lê Hữu Thống... Nội dung trình bày Session Tracking Cài đặt Session Tracking - Servlet Session API Xây
Trang 1CHUYÊN ĐỀ JAVA
SERVLET SESSION TRACKING
• Lâm Thị Xuân Thanh
• Đỗ Xuân Thiện
• Lê Hữu Thống
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
Session ID 1
Session 1 Client 1
Server
Session ID 2
Session 2 Client 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();
session.setMaxInactiveInterval(int interval); Gán/lấy thời gian session timeout
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){
SomePOJO data = (SomePOJO)session.getAttribute(“ SomeName ”);
}
//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 HttpSession session = request.getSession ();
2 synchronized (session){
3 session.setAttribute( );
4 session.getAttribute( );
5 session.removeAttribte( );
7
- 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 HttpSession session = request.getSession();
2 synchronized (session) {
3 Integer accessCount;
4 if (session.getAttribute("AccessCount") != null) {
5 accessCount = (Integer)
6 session.getAttribute("AccessCount") + 1;
7
9 accessCount = 1;
11 session.setAttribute("AccessCount", accessCount);
12 out.println("<html>");
13 out.println("<head>");
14 out.println("<meta http-equiv='Content-Type'
15 content='text/html; charset=utf-8' />");
16 out.println("<title>Show Session</title>");
17 out.println("</head>");
18 out.println("<body>");
19 out.println("<h1 align='center'>THÔNG TIN SESSION</h1>");
Trang 12Servlet Session API - Access Count
1 out.println("<table width='400' border='1' align='center'
2 cellpadding='0' cellspacing='0'>");
3 out.println(" <tr bgcolor='#00FFFF'>");
4 out.println(" <td><strong>Thông tin</strong></td>");
5 out.println(" <td><strong>Giá tr?</strong></td>");
6 out.println(" </tr>");
7 out.println(" <tr>");
8 out.println(" <td width='40%'>ID</td>");
9 out.println(" <td>" + session.getId() + "</td>");
10 out.println(" </tr>");
11 out.println(" <tr>");
12 out.println(" <td>Thời gian tạo lần đầu tiên</td>");
13 out.println(" <td>" + new
14 Date(session.getCreationTime()) + "</td>");
15 out.println(" </tr>"); out.println(" <tr>");
16 out.println(" <td>Thời gian truy cập lần cuối </td>");
17 out.println(" <td>" + new
18 Date(session.getLastAccessedTime()) + "</td>");
Trang 13Servlet Session API - Access Count
1
2
3
4
out.println( "
out.println( "
out.println( "
<tr>" );
<td>Thời gian timeout</td>" );
<td>" +
5 session.getMaxInactiveInterval() + "</td>" );
6
7
8
9
10
11
12
out.println( "
out.println( "
out.println( "
out.println( "
out.println( "
</tr>" );
<tr>" );
<td>Số lần truy cập</td>" );
<td>" +accessCount + "</td>" );
</tr>" );
13
14
15
16
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 KhachHang
XoaMotSoDauSachKhoiGioHang
<<extend>>
<<extend>>
XemDanhSachDonDatHang
<<extend>>
XemGioHang
<<extend>>
CapNhatSoLuongSach TrongGioHang
XemChiTietDonDatHang ThanhToan
Trang 17BookOnline - Cơ sở dữ liệu
Trang 18THE END