请求、会话和Servlet上下文中属性的区别
请求、会话和Servlet上下文中属性的区别
这个问题已经有答案了:
我对以下三种设置属性的方法之间的区别感到困惑:
// 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());
- 它们之间有什么区别?
- 在什么情况下应该使用每种方法?
admin 更改状态以发布 2023年5月22日
ServletContext 属性是通过
ServletContext.setAttribute()
方法绑定到上下文中的对象,并且对于该上下文中所有 Servlet(包括 JSP)都是可用的,或者通过getContext()
方法对其他上下文可用。根据定义,上下文属性在定义它们的 VM 中本地存在。因此,在分布式应用程序中不可用。Session 属性绑定到会话,作为向一组相关的 HTTP 请求提供状态的方式。会话属性仅对加入会话的那些 Servlet 可用。对于分布式场景中的不同 JVM 也不可用。对象可以实现
HttpSessionBindingListener
接口,在它们被绑定/解绑到会话时得到通知。Request 属性绑定到特定的请求对象,并且只会在请求被解决或在从 Servlet 到 Servlet 过程中继续传递时存在。它们更多地被用作 Servlet 之间的通信渠道,通过
RequestDispatcher
接口(由于不能添加参数...),以及由容器使用。当您必须在信息提供程序和信息呈现层(绑定到特定请求并且不需要再次使用的 JSP)之间提供设置信息时,请求属性在 Web 应用程序中非常有用,通常情况下,在没有严格控制策略的会话中会出现这种情况。总之,我们可以说:
- Context 属性用于基础设施,例如共享连接池。
- Session 属性用于上下文信息,例如用户标识。
- Request 属性用于特定请求信息,例如查询结果。