这个问题已经在这里有一个答案:
- 如何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());
- 有什么区别?
- 当你要使用的呢?
甲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]