Thứ Hai, 8 tháng 9, 2014

Session In Java Web

Một ví dụ của việc dùng session trong việc phát triển ứng dụng web là đặc điểm shopping cart của các trang web mua hàng. Khi bạn chọn lựa và thêm các item vào giỏ hàng, session sẽ nhớ các lựa chọn của bạn; như vậy shopping cart của bạn sẽ có những sản phẩm mà bạn đã lựa chọn khi bạn check out. Nếu k có session, nếu bạn checkout, cái trang mới mà bạn sắp chuyển hướng đến sẽ không nhận biết được các hoạt động mà bạn đã làm từ những trang trước và giỏ hàng sẽ trống trơn, luôn luôn là như vậy. 

Như vậy, Website sử dụng session để chắc chắn rằng nó sẽ nhận ra bạn khi bạn chuyển trang trong cùng một website hoặc khi bạn refesh trang. 

Các phương thức để quản lý session:

URL Rewriting: các client có thể gửi thông tin đến server bằng cách thêm ID của session vào địa chỉ URL cùng với các requests. Việc này khá gây mệt mỏi vì tự chúng ta phải theo dõi các tham số này trong mỗi response từ server và phải đảm bảo rằng các ID của các session k trùng nhau

Hidden Form Variables: Chúng ta có thể tạo các trường ẩn trong HTML và khi người dùng bắt đầu chuyển hướng, chúng ta có thể gán 1 giá trị duy nhất cho người dùng đó, đồng thời theo dõi được các session. Độ bảo mật khi dùng phương pháp này là không cao bới vì chúng ta rất dễ dàng lấy được giá trị từ những trường ẩn này từ HTML

Ngoài ra, còn có những phương thức khác như Persistent Cookies, Persistent Mechanism hay Servlet APIs.., Trong đó, Servlet APIs được xây dựng dựa trên các phương thức trên

Cách sử dụng Session

Chúng ta sẽ tạo một ứng dụng web nhằm lưu username của người dùng vào session rồi sau đó hiển thị ở trang sau:

Đầu tiên, tạo 1 trang HTML như sau:


Sau khi người dùng nhập username và nhấn Login, Servlet Login sẽ kiểm tra xem username có trong database không

Tiếp theo, chúng ta tạo Servlet Login như sau:

public class Login extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Login</title>");
            out.println("</head>");
            out.println("<body>");

            String username = request.getParameter("username");
            if (userList.contains(username)) {
                HttpSession session = request.getSession();
                session.setAttribute("username", username);
                RequestDispatcher rd = request.getRequestDispatcher("Logined");
                rd.forward(request, response);
            }
            out.println("<h1>UserName Mismatch " +"</h1>");

            out.println("</body>");
            out.println("</html>");
        }
    }
    protected List<String> userList = null;

    @Override
    public void init() throws ServletException {
        userList = new LinkedList<>();
        userList.add("Long");
        userList.add("Hoang");
        userList.add("Tuan");

    }
}

Ở trên, chúng ta có 1 mock data là userList được khởi tạo và thêm phần tử ở hàm init().
Ở hàm processRequest(), username được lưu vào 1 session có tên là "username" thông qua session.setAttribute("SessionName", SessionValue) rồi sau đó chuyển hướng trang sang Logined Servlet 

Tại Servlet Logined, giá trị của session có tên là "username" được lấy ra thông qua session.getAttribute("SessionName") và hiển thị trong hàm processRequest:

 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
         
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Logined</title>");            
            out.println("</head>");
            out.println("<body>");

             HttpSession session = request.getSession();
            String username = (String) session.getAttribute("username");

            out.println("<h1>Hello, " + username + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

Không có nhận xét nào:

Đăng nhận xét