I read that isNew() returns true if the client has not yet responded with the session ID. But what does it mean ?
考虑服务器当前正在处理请求.会话处理有两种情况.
>在新会话方案中,服务器正在为用户/客户端创建新会话. (客户端可能在请求中没有提供会话ID,或者它可能提供了服务器认为无效的会话ID.)servlet的应用程序代码决定是否需要会话(例如,因为它有一些想要的信息)存储在那里),并尝试使用“如果不存在”标志获取它. servlet基础结构意识到没有当前会话,创建具有新会话ID的新会话,并将其保存在会话存储中.在请求完成时,会话ID返回给客户端;例如作为cookie,或作为附加会话ID的URL.
>在现有会话场景中,客户端在请求中包含会话ID;例如作为会话cookie,或作为请求URL中的会话ID. servlet基础结构识别此id,在其会话存储中查找它,并且(如果需要)重新创建包含从会话存储中检索的会话状态的HttpSession对象.当servlet的应用程序代码尝试访问会话时,它会获取此HttpSession对象,而不是新对象.然后,servlet在处理请求时可以使用和更新会话状态.
在第一个场景中,在会话对象上调用isNew()将返回true,因为这是一个新会话.
在第二种情况下,在会话对象上调用isNew()将返回false,因为这不是新会话.
How does calling isNew() on the session object,check if the session is a new one or is already in use ?
servlet基础结构知道发生了两个场景中的哪一个,因为它进行了会话创建或会话查找. isNew()最明显的实现是在HttpSession对象中包含一个私有布尔字段,并返回该字段的值作为isNew()的结果.该字段将由servlet基础结构根据其获取会话对象的方式进行初始化.