我无法理解这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());
答案 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上下文,直到上下文被破坏为止。