我编写了一个异步servlet,用于将缓存对象中的更改提供给已向servlet发送请求的所有客户端。
根据请求,客户端可以通过包含不同的参数来获取缓存的子部分。
我只是将请求存储在ArrayList中,并在发生更改时迭代它们以将响应发送回客户端。
一切都运行良好,除了现在我需要处理客户端发送可能不同参数的第二个请求的情况。
我希望在发生这种情况时替换我用这个新存储的旧请求。但要做到这一点,我需要知道请求是否来自同一个用户。有没有办法测试请求是否来自与Servlets 3.0相同的用户?
答案 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。