Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlets:HttpServletRequest中的setAttribute与HttpSession中的setAttribute_Java_Servlets - Fatal编程技术网

Java Servlets:HttpServletRequest中的setAttribute与HttpSession中的setAttribute

Java Servlets:HttpServletRequest中的setAttribute与HttpSession中的setAttribute,java,servlets,Java,Servlets,HttpServletRequest类的方法setAttribute()与HttpSession类的方法setAttribute()之间有什么区别 在什么情况下使用它们?一个在请求范围内设置属性,另一个在会话范围内设置属性。主要区别在于作用域的生命周期。当相关响应完成时,请求范围结束。当会话被客户端或服务器超时时,会话作用域结束。当一个作用域结束时,它的所有属性都将被丢弃,并且它们在不同的请求或会话中不可用 您可以使用请求范围存储特定于HTTP请求的数据(例如,基于特定请求的数据库结果、成功/错

HttpServletRequest
类的方法
setAttribute()
HttpSession
类的方法
setAttribute()
之间有什么区别


在什么情况下使用它们?

一个在请求范围内设置属性,另一个在会话范围内设置属性。主要区别在于作用域的生命周期。当相关响应完成时,请求范围结束。当会话被客户端或服务器超时时,会话作用域结束。当一个作用域结束时,它的所有属性都将被丢弃,并且它们在不同的请求或会话中不可用

您可以使用请求范围存储特定于HTTP请求的数据(例如,基于特定请求的数据库结果、成功/错误消息等)。您可以使用会话作用域存储特定于HTTP会话的数据(例如,登录用户、用户设置等)。同一客户端的所有请求共享同一会话(因此,同一客户端会话中的所有不同浏览器选项卡/窗口将共享同一服务器会话)

另见:

如果使用httpServletRequest.setAttribute();然后属性将绑定到该请求对象

httpServletSession.setAttribute()中时将绑定属性。正在开会

因此,如果您希望该数据的范围用于会话使用
session
,或者如果您需要该数据的范围仅用于请求使用
request

例如:

登录用户的用户名应在整个会话中共享,因此请将其保留在
会话中


当您在考虑身份验证失败的情况下给用户提供错误消息时,它只需要在我们不需要将其保存在<代码>请求< /代码>

之后,当您在请求对象上设置属性时,该变量仅在请求的范围内可用。该变量可由作为此请求一部分转发的其他jsp/资源访问

在会话上设置属性时,作用域将可用于用户会话中的所有请求(除非将其从会话中删除)

因此,它的主要区别在于属性的范围/生命周期

始终尝试使用请求范围变量,除非您需要在整个用户会话中使用它,例如用户角色。与更多并发用户保持会话上的更多数据可能会导致内存不足问题。此外,如果您正在使用由数据库支持的会话共享(就像您在websphere中所做的那样),它将导致性能问题