2013-03-14 48 views
6

tôi đang gặp khó khăn tìm hiểu sự khác biệt giữa các 3 cách các thuộc tính thiết lập:Sự khác nhau giữa các thuộc tính trong Request, Session và ServletContext

// String as attribute of request 
req.setAttribute("name", "Sluggo"); 

// Integer as attribute of session 
req.getSession().setAttribute("age", 10); 

// Date as attribute of context 
getServletContext().setAttribute("today", new Date()); 
  1. sự khác biệt là gì?
  2. Khi nào bạn nên sử dụng?
+1

liên quan: http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading/3106909#3106909 – BalusC

Trả lời

2

cả ba có phạm vi khác nhau,

thuộc tính yêu cầu của cuộc sống cho rằng chu kỳ đáp ứng yêu cầu, thuộc tính

phiên của phiên đó,

ServletContext ở mọi khía cạnh bối cảnh servlet và nó sống cho đến bối cảnh bị phá hủy

+0

Câu trả lời là quá tròn để có ích. Liên kết được cung cấp ở trên (https: // stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-sessions-shared-variables-và-multithreadi) cung cấp phản hồi chi tiết hơn nhiều. – user823447

14

Thuộc tính ServletContext là một đối tượng bị ràng buộc vào ngữ cảnh thô phương pháp ServletContext.setAttribute() và có sẵn cho TẤT CẢ Servlets (do đó JSP) trong ngữ cảnh đó hoặc đến các ngữ cảnh khác thông qua phương thức getContext(). Theo định nghĩa, một thuộc tính context tồn tại cục bộ trong VM, nơi chúng được định nghĩa. Vì vậy, chúng không khả dụng trên các ứng dụng được phân phối.

Phiên thuộc tính được ràng buộc với Phiên, là phương tiện để cung cấp trạng thái cho một tập hợp các yêu cầu HTTP có liên quan. Thuộc tính phiên chỉ có sẵn cho các Servlets tham gia phiên. Chúng cũng không có sẵn cho các JVM khác nhau trong các kịch bản phân tán. Các đối tượng có thể được thông báo khi chúng bị ràng buộc/không liên kết với phiên thực hiện giao diện HttpSessionBindingListener.

Yêu cầu thuộc tính được ràng buộc với một đối tượng yêu cầu cụ thể và chúng cuối cùng theo yêu cầu được giải quyết hoặc trong khi nó được gửi từ Servlet đến Servlet. Chúng được sử dụng nhiều hơn như kênh giao tiếp giữa Servlets thông qua Giao diện RequestDispatcher (vì bạn không thể thêm Tham số ...) và theo vùng chứa. Các thuộc tính yêu cầu rất hữu ích trong các ứng dụng web khi bạn phải cung cấp thông tin thiết lập giữa các nhà cung cấp thông tin và lớp trình bày thông tin (một JSP) bị ràng buộc với một yêu cầu cụ thể và không cần nữa, thường xảy ra với các phiên không có kiểm soát nghiêm ngặt chiến lược.

Nói tóm lại, chúng ta có thể nói rằng:

  • Context thuộc tính có nghĩa là cho hạ tầng, như hồ kết nối chia sẻ.
  • Phiên thuộc tính dành cho thông tin theo ngữ cảnh, chẳng hạn như nhận dạng người dùng.
  • Yêu cầu thuộc tính dành cho thông tin yêu cầu cụ thể, chẳng hạn như kết quả truy vấn.

Nguồn: Servlets Interview Questions by Krishna Srinivasan @ javabeat.net

Các vấn đề liên quan