Request,Session和ServletContext中属性之间的差异

时间:2013-03-14 00:13:23

标签: java jsp servlets web

我无法理解这3种设置属性的方法之间的差异:

// 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. 有什么区别?
  2. 你应该何时使用它们?

2 个答案:

答案 0 :(得分:19)

  

ServletContext 属性是绑定到上下文中的对象   通过ServletContext.setAttribute()方法,它是   可用于该上下文中的所有Servlet(因此JSP)或其他   上下文通过getContext()方法。根据定义上下文   属性存在于定义它们的VM中的本地。所以,   它们在分布式应用程序上不可用。

     

会话属性绑定到会话,作为向一组相关HTTP请求提供状态的手段。会话属性是   仅适用于加入会话的Servlet。他们也是   在分布式方案中不可用于不同的JVM。物体可以   当他们绑定/未绑定到实现该会话的会话时通知   HttpSessionBindingListener界面。

     

请求属性绑定到特定的请求对象,并且它们会在请求被解析或持续存在时持续存在   从Servlet发送到Servlet。他们更多地被用作沟通   通过RequestDispatcher接口在Servlet之间建立通道(自此   你不能添加参数...)和容器。请求属性   在必须提供设置信息时,在Web应用程序中非常有用   信息提供者和信息表示层之间   (JSP)绑定到特定请求且无需可用   更长时间,这通常发生在没有严格的会议   控制策略。

     

简介,我们可以这样说:

     
      
  • 上下文属性适用于基础结构,例如共享连接池。
  •   
  • 会话属性适用于上下文信息,例如用户标识。
  •   
  • 请求属性适用于特定的请求信息,例如查询结果。
  •   

来源:Servlets Interview Questions by Krishna Srinivasan @ javabeat.net

答案 1 :(得分:6)

这三者有不同的范围:

  • 在请求/响应周期的生命周期内请求属性

  • 该会话生命周期的会话属性

  • ServletContext跨越servlet上下文,直到上下文被破坏为止。