【问题标题】:Differences between attributes in Request, Session and ServletContext [duplicate]Request、Session 和 ServletContext 中的属性之间的差异 [重复]
【发布时间】:2013-03-02 04:35:51
【问题描述】:

我无法理解这 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. 什么时候应该使用它们?

【问题讨论】:

标签: java jsp servlets web


【解决方案1】:

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

Session 属性绑定到 Session,作为向一组相关 HTTP 请求提供状态的一种手段。会话属性是 仅对加入会话的那些 Servlet 可用。他们也是 分布式场景下不同的JVM不可用。对象可以是 当他们绑定/未绑定到实现的 Session 时通知 HttpSessionBindingListener接口。

Request 属性绑定到特定的请求对象,并且它们会持续到请求被解析或持续存在时 从 Servlet 分派到 Servlet。它们更多地用作交流 Servlet 之间通过RequestDispatcher 接口的通道(因为 你不能添加参数...)和容器。请求属性 当您必须提供设置信息时,在 Web 应用程序中非常有用 信息提供者和信息表示层之间 (一个 JSP) 绑定到特定请求并且不需要可用 不再,这通常发生在没有严格要求的会话中 控制策略。

总结,我们可以说:

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

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

【讨论】:

  • 对于 Servlet 2.5,ServletContext.getInitParameter() 是否会返回由 ServletContext.setAttribute() 设置的相同属性?
【解决方案2】:

这三个有不同的范围:

  • 请求属性在请求/响应周期的整个生命周期内都存在

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

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

【讨论】:

  • 答案太循环了,没有帮助。上面提供的链接 (stackoverflow.com/questions/3106452/…) 提供了更详细的回复。
  • @user823447 我同意。说会话属性在会话的生命周期内持续存在,并且 ServletContext 跨越 servlet 上下文没有任何解释。
  • @Jigar Joshi:对于 Servlet 2.5,ServletContext.getInitParameter() 是否会返回由 ServletContext.setAttribute() 设置的相同属性?
猜你喜欢
  • 2011-04-04
  • 2020-02-11
  • 1970-01-01
  • 2012-11-21
  • 2012-12-16
  • 2018-07-24
  • 2011-07-23
  • 2016-09-03
  • 1970-01-01
相关资源
最近更新 更多