在异步servlet中用旧的请求替换旧请求

时间:2013-03-23 01:00:05

标签: java servlets asynchronous httprequest servlet-3.0

我编写了一个异步servlet,用于将缓存对象中的更改提供给已向servlet发送请求的所有客户端。

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

我只是将请求存储在ArrayList中,并在发生更改时迭代它们以将响应发送回客户端。

一切都运行良好,除了现在我需要处理客户端发送可能不同参数的第二个请求的情况。

我希望在发生这种情况时替换我用这个新存储的旧请求。但要做到这一点,我需要知道请求是否来自同一个用户。有没有办法测试请求是否来自与Servlets 3.0相同的用户?

1 个答案:

答案 0 :(得分: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。