CHUYÊN ĐỀ JAVA
SERVLET 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 dựng BookOnline
- Đăng nhập
- Quản lý giỏ hàng
2
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 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 đó?
3
Session 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.
4
Session Tracking
Session ID 1
Session 1
Client 1
Server
Session ID 2
Session 2
Client 2
5
Session Tracking
Cài đặt Session Tracking sử dụng
- Servlet Session API
6
Session 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);
session.setAttribute(String
name, Object obj)
Lưu trữ dữ liệu vào session
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()
7
Session 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()
longtạotime
= lần đầu tiên
Lấy thời gian
session
session.getCreationTime();
time
long
Lấy thời
gian= truy xuất session lần cuối
session.getLastAccessedTime();
session.setMaxInactiveInterval(int
interval);
Gán/lấy thời gian session timeout
int interval = session.getMaxInactiveInterval();
8
Session Tracking - Servlet Session API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
9
//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();
Session 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
10
Servlet Session API - Access Count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
11
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("
content='text/html; charset=utf-8' />");
out.println("<title>Show Session</title>");
out.println("</head>");
out.println("<body>");
out.println("
THÔNG TIN SESSION
");
Servlet Session API - Access Count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
12
out.println("
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>");
1
Servlet Session API - Access Count
out.println("
<tr>");
<td>Thời gian timeout</td>");
out.println("
out.println("
<td>" +
session.getMaxInactiveInterval() + "</td>");
6
out.println("
</tr>");
7
out.println("
<tr>");
8
out.println(" <td>Số lần truy cập</td>");
9
out.println(" <td>" +accessCount +
"</td>" )
10
11
</tr>");
out.println("
12
out.println("</table>");
13
out.println("</body>");
14
15
out.println("</head>");
16
out.println("</html>");
1
2
3
4
5
13
Servlet Session API - Access Count
14
BookOnline - 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
15
BookOnline - Use case
DuaSachVaoGioHang
KhachHang
XoaMotSoDauSachKhoiGioHang
<<extend>>
<<extend>>
XemDanhSachDonDatHang
<<extend>>
XemChiTietDonDatHang
16
XemGioHang
<<extend>>
CapNhatSoLuongSach
TrongGioHang
ThanhToan
BookOnline - Cơ sở dữ liệu
17
THE END
18