在请求属性之间的差异,会话和ServletContext的[复制](Differences betw

2019-07-21 13:38发布

这个问题已经在这里有一个答案:

  • 如何servlet的工作? 实例化,会话,共享变量和多线程 8个回答

我无法理解设置属性的这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. 当你要使用的呢?

Answer 1:

这三个有着不同的范围:

  • 请求属性住了这一请求/响应周期的生命

  • 该届会议的生活会话属性

  • ServletContext是整个servlet上下文和它生活,直到Context获取销毁。



Answer 2:

ServletContext属性是装订成通过所述上下文对象ServletContext.setAttribute()方法和这是提供给在这方面所有servlet(因此JSP),或经由其它上下文getContext()方法。 根据定义上下文属性在定义它们的VM本地存在。 因此,他们是在分布式应用程序不可用。

会话属性绑定到会话,作为平均提供状态,以一组相关的HTTP请求。 会话属性只提供给那些参加会议的servlet。 他们还无法在分布式场景中不同的JVM。 对象可以当他们势必/绑定到实现会话通知HttpSessionBindingListener接口。

请求属性绑定到特定的请求对象,他们就持续作为请求解决或在它不断被从Servlet的分派到的servlet。 他们用更多的经由servlet之间的通信信道RequestDispatcher接口(因为你不能添加参数...)和容器。 请求属性是Web应用程序非常有用,当你必须提供信息提供者和信息表现层(JSP)之间建立信息绑定到特定的要求,且需要看不到任何可以更长,这通常与会话发生不严格控制战略。

综上所述 ,我们可以说:

  • 上下文属性意味着基础结构,诸如共享连接池。
  • 会话属性意味着上下文信息,如用户标识。
  • 请求属性都是为了特定的请求信息,如查询结果。

资料来源: 由克里希纳斯里尼瓦桑@ javabeat.net servlet的面试问题



文章来源: Differences between attributes in Request, Session and ServletContext [duplicate]