Blog cá nhân của Đức NT (GC00464)

Thứ Ba, 9 tháng 9, 2014

Session

23:09 Posted by Đức NT No comments

Sử dụng Session

Khi một request được gửi đến server qua giao thức HTTP, server sẽ không thể lưu giữ các thông tin của client, vì thế người ta nghĩ ra nhiều phương pháp khác để hạn chế khuyết điểm này, Session là một trong số đó.

Demo Session

Develop user story "Login" with mock data instead of database.

Tạo một project với 2 servlet tên ServLoginDashboard. Dùng LinkedList để làm một "database đơn giản" :)

Code ở index.html
 <html>  
   <head>  
     <title>Session Test</title>  
     <meta charset="UTF-8">  
     <meta name="viewport" content="width=device-width, initial-scale=1.0">  
   </head>  
   <body>  
     <h1>Hello, Guest!</h1>  
     <a href="ServLogin">Login to view this page.</a>  
   </body>  
 </html>  

Code ở ServLogin
   protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {  
     response.setContentType("text/html;charset=UTF-8");  
     try (PrintWriter out = response.getWriter()) {  
       String user = request.getParameter("username");  
       HttpSession session = request.getSession();  
       if (user != null) {  
         session.setAttribute("username", user);  
       }  
       String username = (String) session.getAttribute("username");  
       if (username == null) {  
         out.println("<!DOCTYPE html>");  
         out.println("<html>");  
         out.println("<head>");  
         out.println("<title>Servlet ServLogin</title>");  
         out.println("</head>");  
         out.println("<body>");  
         out.println("<h1>Login</h1>");  
         out.println("<form action=\"ServLogin\">");  
         out.println("Username: <input name=\"username\">");  
         out.println("<input type=\"submit\" value=\"Login\">");  
         out.println("</form>");  
         out.println("</body>");  
         out.println("</html>");  
       } else  
       if (!listUsername.contains(username)) {  
         session.setAttribute("username", null);  
         out.println("<!DOCTYPE html>");  
         out.println("<html>");  
         out.println("<head>");  
         out.println("<title>Login failed</title>");  
         out.println("</head>");  
         out.println("<body>");  
         out.println("<h1>Login failed</h1>");  
         out.println("<div>The username could not be found, try again.</div>");  
         out.println("<form action=\"ServLogin\">");  
         out.println("Username: <input name=\"username\">");  
         out.println("<input type=\"submit\" value=\"Login\">");  
         out.println("</form>");  
         out.println("</body>");  
         out.println("</html>");  
       }   
       else {  
         RequestDispatcher rd = request.getRequestDispatcher("Dashboard");  
         rd.forward(request, response);  
       }  
     }  
   }  
   protected List<String> listUsername;  
   @Override  
   public void init() throws ServletException {  
     listUsername = new LinkedList<>();  
     listUsername.add("ducntgc00464");  
   }  


Code ở Dashboard
 protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {  
     response.setContentType("text/html;charset=UTF-8");  
     try (PrintWriter out = response.getWriter()) {  
       HttpSession session = request.getSession();  
       String username = (String) session.getAttribute("username");  
       out.println("<!DOCTYPE html>");  
       out.println("<html>");  
       out.println("<head>");  
       out.println("<title>Servlet Dashboard</title>");        
       out.println("</head>");  
       out.println("<body>");  
       out.println("<h1>Hello, " + username + "</h1>");  
       out.println("</body>");  
       out.println("</html>");  
     }  
   }  

Hoàn thành
1. Giao diện trang index, click vào "Login to view this page." sẽ chuyển đến ServLogin, nếu đã từng đăng nhập thành công bạn sẽ không cần đăng nhập mà vẫn xem được trang.

2. Giao diện trang ServLogin khi chưa từng đăng nhập hoặc đã từng đăng nhập nhưng chưa thành công.

3. Giao diện trang ServLogin khi đăng nhập sai.

4. Khi đăng nhập thành công (foward đến Dashboard).
Download Source Code: http://www.mediafire.com/download/m2rlhfd4g73coyg/SessionTest.rar

Cảm nhận về Session

Sử dụng Session phức tạp hơn so với Dispatcher, có nhiều câu lệnh và phương thức hơn nên cũng khó nhớ hơn. Nhờ Session tôi hiểu được cách một số website bán hàng lưu giỏ hàng của khách hàng như thế nào, điều mà tôi thắc mắc bấy lâu nay :)

0 nhận xét:

Đăng nhận xét

Bỏ capcha cho thầy tiện comment :P