Java Servlets – Ajax请求带有混合响应

我得到了一些奇怪的结果,几乎同时向同一个java servlet发送多个异步AJAX调用。

例如,假设我使用jQuery同时发送两个AJAX请求。

//ajax call foo $.post('LookupServlet', { method: 'findFoo' }; //ajax call bar $.post('LookupServlet', { method: 'findBar' }; 

在我的servlet中,它调用给定的方法。 该方法将响应写入流。

奇怪的是,foo有时会得到bar的响应。 反之亦然。 或者有时一个ajax调用正在获得两个响应。 或者一个请求获得响应而另一个请求不响应。

在其他服务器端语言中我以前从未见过这样的东西,我甚至都不知道它是可能的。 有没有人有任何关于为什么会这样的理论? Java servlet如何在同时请求可以获得交叉响应的情况下运行?

可能的原因是servlet没有写成线程安全的。 请注意,包含servlet方法的对象可用于响应许多同时发出的请求。 如果该方法使用类级别变量来创建响应,那么请求将显示为“混淆”。

所以..请求#1进来,被分配给一个Servlet实例,实例#1

在Instance#1上调用适当的方法,它开始使用类变量来计算结果。 实例#1.myVariable =“Blah”

现在,请求#2进入,也被分配给实例#1

同样,在Instance#1上调用适当的方法,它设置Instance#1.myVariable =“Foo”

..在第一个请求完成的同时,返回Instance#1.myVariable ……“Foo”!

..然后第二个请求完成,并返回“Foo”。