Java 在异步servlet中用新请求替换旧请求

Java 在异步servlet中用新请求替换旧请求,java,servlets,asynchronous,httprequest,servlet-3.0,Java,Servlets,Asynchronous,Httprequest,Servlet 3.0,我编写了一个异步servlet,将缓存对象中的更改提供给所有向servlet发送请求的客户端 通过请求,客户机可以通过包含不同的参数来获得缓存的一部分 我只是将请求存储在ArrayList中,并在发生更改时对其进行迭代,以将响应发送回客户端 一切都很好,除了现在我需要处理这样一种情况:客户机将发送可能具有不同参数的第二个请求 发生这种情况时,我想用这个新请求替换我存储的旧请求。但要做到这一点,我需要知道请求是否来自同一个用户。是否有办法测试请求是否来自使用Servlets 3.0的同一用户?必须

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

通过请求,客户机可以通过包含不同的参数来获得缓存的一部分

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

一切都很好,除了现在我需要处理这样一种情况:客户机将发送可能具有不同参数的第二个请求


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

必须提供旧请求。您可以发送一个错误响应,连接:closed header

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

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

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

您必须能够在多个会话中识别同一用户吗?不,不是多个会话