Thứ Hai, 8 tháng 9, 2014

Servlet Context

Một trường hợp mà servlet context có thể phát huy tác dụng: Giả sử ứng dụng web của bạn có 2 servlet class, và cả 2 đều phải lấy 1 giá trị từ web.xml, trong trường hợp này ServletContext sẽ rất hữu ích vì tất cả các servlet trong cùng 1 ứng dụng web đều có thể truy cập vào các giá trị ở mức context như thê.

Bạn có thể truy cập vào nó thông qua HttpRequest, như thế này:
ServletContext context = request.getServletContext();


Context Attributes

Giống như session, bạn cũng có thể lưu giá trị vào servlet context như sau:

context.setAttribute("NameOfValue",Value);

và lấy giá trị theo tên như sau:

Object attribute = context.getAttribute("NameOfValue");

ServletContext khác với Session ở chỗ, giá trị lưu ở ServletContext có thể được truy cập bởi tất cả các servlet, giữa các requests và sessions. Điều đó có nghĩa giá trị lưu trong ServletContext có thể được dùng cho tất cả các khách ghé thăm trang web. Còn giá trị lưu trong session thì chỉ có 1 khách duy nhất truy cập được.

How to Use:

Chúng ta sẽ tạo một ứng dụng web đếm số lần trang web được ghé thăm

Đầu tiên, chúng ta sẽ tạo 1 servlet có tên là Page1 như sau (Servlet Page2 tương tự):

public class Page1 extends HttpServlet {

    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 NewServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            
            ServletContext context = request.getServletContext();
            Integer count =  (Integer) context.getAttribute("count");
            ìf(count!=null){
                 count = 1;
            }
            
            count++;
            context.setAttribute("count",count);

            out.println("<h1>Page Views " + count + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }
}

Bây giờ, mỗi lần chúng ta refesh Page1 thì count sẽ tăng lên 1. Và nếu chúng ta refresh Page 2 thì count sẽ tăng lên 1 từ giá trị count mới nhất từ Page1. Điều đó có nghĩa là 2 servlet Page1 và Page2 cùng có thể truy cập vào giá trị của count ở mức context của ứng dụng web.

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

Đăng nhận xét