我读到,如果客户端尚未使用会话ID进行响应,则isNew()返回true。但是这是什么意思 ?
考虑服务器当前正在处理请求。关于会话处理,有两种方案。
在新的会话方案中,服务器正在为用户/客户端创建一个新的会话。(客户端可能未在请求中提供会话ID,或者可能已提供服务器认为无效的会话ID。)Servlet的应用程序代码确定需要进行会话(例如,因为它具有某些信息,它希望存储在那里),并尝试使用“如果不存在则创建”标志来获取它。Servlet基础结构意识到没有当前会话,使用新的会话ID创建一个新会话,并将其保存在会话存储区中。请求完成后,会话ID返回给客户端;例如,作为cookie或附加了会话ID的URL。
在现有的会话场景中,客户端已在请求中包含一个会话ID。例如作为会话cookie或请求URL中的会话ID。Servlet基础结构会识别此ID,在其会话存储区中查找它,并(如有必要)重新创建
HttpSession
包含从会话存储区检索到的会话状态的对象。当Servlet的应用程序代码尝试访问该会话时,它将获取此HttpSession
对象,而不是新对象。然后,会话状态可以由Servlet在处理请求时使用和更新。
在第一种情况下,
isNew()将返回对会话对象的调用,
true因为这是一个新会话。
在第二种情况下,
isNew()将返回对会话对象的调用,
false因为这不是新的会话。
如何在会话对象上调用isNew(),检查会话是新会话还是已在使用中?
Servlet基础结构知道发生了两种情况,因为它进行了会话创建或会话查找。最明显的实现
isNew()是
privateboolean在
HttpSession对象中包含一个字段,并作为的结果返回该字段的值
isNew()。该字段将由servlet基础结构根据它如何获取会话对象进行初始化。



