请求、会话和Servlet上下文中属性的区别

7 浏览
0 Comments

请求、会话和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());

  1. 它们之间有什么区别?
  2. 在什么情况下应该使用每种方法?
admin 更改状态以发布 2023年5月22日
0
0 Comments

这三个具有不同的作用域:

  • 请求属性在请求/响应周期内存在

  • 会话属性在会话期间存在

  • ServletContext地址在Servlet上下文中,它存在于上下文销毁之前。

0
0 Comments

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

Session 属性绑定到会话,作为向一组相关的 HTTP 请求提供状态的方式。会话属性仅对加入会话的那些 Servlet 可用。对于分布式场景中的不同 JVM 也不可用。对象可以实现 HttpSessionBindingListener 接口,在它们被绑定/解绑到会话时得到通知。

Request 属性绑定到特定的请求对象,并且只会在请求被解决或在从 Servlet 到 Servlet 过程中继续传递时存在。它们更多地被用作 Servlet 之间的通信渠道,通过 RequestDispatcher 接口(由于不能添加参数...),以及由容器使用。当您必须在信息提供程序和信息呈现层(绑定到特定请求并且不需要再次使用的 JSP)之间提供设置信息时,请求属性在 Web 应用程序中非常有用,通常情况下,在没有严格控制策略的会话中会出现这种情况。

总之,我们可以说:

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

来源:Krishna Srinivasan @ javabeat.net 的 Servlets 面试问题

0