Web服务器如何在Java中识别请求?

问题描述:

考虑senario,我在Servlet中使用servlet和httpSession对象,并且我将一些数据添加到会话对象中,并将响应发送到客户端,并且客户端发送对下一个需要存储在会话对象中的信息的servlet页面的请求。现在,Web服务器如何能够通知客户端发出的请求,并与之前请求创建的特定会话对象相关联?假设如果cookies被禁用?Web服务器如何在Java中识别请求?

如果cookies不可用,会话跟踪会在URL重写时发生。服务器中的每个URL都应该使用会话标识进行编码(HttpResponse.encodeURL()为您完成此操作)。

另一种方法是通过隐藏字段为会话ID。但是,这仅适用于POST请求。

+0

它(隐藏字段)也适用于GET请求,如果它们来自FORM或javascript,但也不适用于链接(在这种情况下,url-重写或自己附加隐藏字段是一种选择)。 – rurouni 2011-05-26 07:19:41

现在怎么一个Web服务器可以能够通知客户端给出的请求与以前的请求创建perticular会话对象联系?

通常它使用cookie。该cookie存储服务器与会话对象相关联的唯一标识符。

看看您的浏览器cookie jar,您可能会发现一个为您的网站存储的jsessionid cookie。


还有其他技术用于实现使用URL重写或隐藏表单字段的会话。尽管使用cookie是最常见和默认的技术。

饼干是迄今为止在Java Web服务器中实现http会话最流行的技术。除了cookie之外,还可以使用其他两种技术 - url重写(即向服务器生成的每个URL附加一些额外信息,这有助于识别会话)以及隐藏在表单中的隐藏字段,其值包含识别会话所需的信息。