2013-03-23 116 views
0

我编写了一个异步servlet将缓存对象中的更改提供给发送请求到servlet的所有客户端。用异步servlet中的新请求替换旧请求

通过请求,客户端可以通过包含不同的参数来获取缓存的一个子部分。

我只是简单地将请求存储在一个ArrayList中,并在发生更改时将其反复发送给客户端。

一切正常,除了现在我有一个要求来处理客户端将发送第二个请求可能不同的参数的情况。

我想用这个新存储的旧请求替换旧的请求。但要做到这一点,我需要知道请求是否来自同一个用户。有没有一种方法来测试请求是否来自Servlets 3.0的同一用户?

+0

您是否必须能够跨多个会话识别同一用户? – clav 2013-03-23 01:12:07

+0

没有没有多个会话 – Geronimo 2013-03-23 01:56:45

回答

1

必须提供旧请求。您可以使用Connection:closed header发送错误响应。

要关联来自同一客户端的请求,唯一的方法就是通过cookie。您可以比较两个请求中的会话ID(这是一个cookie)。如果任何传入请求没有会话,您应该建立一个会话(通过request.getSession()),然后执行重定向,以便客户端将重试带有jsessionid cookie的请求。

if request.getSession(false)==null 
    request.getSession(true); 
    response.sendRedirect(request.uri +"?"+ request.query) 

重定向你的情况必要的,因为通常它会需要一段时间才能返回响应,但我们希望尽快设置cookie。