2012-08-16 43 views
0

我有一个servlet获取一个ID作为参数并返回三个值。由于servlet代码很大,只是给出必要的细节。Servlet结合来自两个不同请求和回复的数据?

getdetails.jsp

Inputs : ID //as a query string 
Returns: ID, average, count // As a JSON string 

从客户端想提出两个异步JavaScript的具有不同ID的请求逐个(第一请求之后立即第二)。是来自服务器的响应如下所示:

对策:

For ID1 : ID1, average1, count1 
For ID2 : ID1, average2, count2 

对于ID2它给出正确平均和计数,但返回ID1(第一请求的ID)。

当我在getdetails1.jsp的getdetails.jsp中放入相同的代码并向每个servlet发出每个请求时,我会得到正确的结果。

回应:

For ID1 : ID1, average1, count1 
For ID2 : ID2, average2, count2 

什么可能是这一点,如何之所以纠正呢?

编辑:getdetails.jsp的 代码:

<%! 
String ID; 
JsonObject details = new JsonObject(); //using Google JSON Lib 
%> 
<% 
ID=request.getParameter("id"); 
details.addProperty("ID",ID); 
... //accessing corresponding average and count 
details.addProperty("average",average); 
details.addProperty("count",count); 
out.println(details); 
%> 

回答

1

问题是@thinksteep建议的。 JSP代码被翻译并编译成Servlet。使用JSP声明<%! %>会创建非线程安全的实例变量。您应该声明这些变量,以便通过将它们从<%! %>部分中删除并在<% %>部分中声明它们,为每个请求创建新变量。

+0

将所有变量从<%! %>移动到<% %>工作! – 2012-08-16 15:38:52

3

我的猜测是,你可能已经被分配请求参数值servlet实例变量。

只会创建一个servlet实例,并且所有请求都共享相同的实例。这导致了这种类型的国家腐败。

+0

NO ..我每次都使用request.getParameter(“id”)方法获取ID。如果是这样,总是应该有相同的平均值和数量。但我得到的平均数和ID2相对应。 – 2012-08-16 14:29:20

+0

增加了一些实现的问题。 – 2012-08-16 14:34:33

+0

@vivek_jonam:我认为Servlet代码可能比JSP代码更有帮助。 – kosa 2012-08-16 14:37:33

2

The number of servlet instances created by a servlet will always be one.

如果您分配请求参数servlet实例,可能会出现此问题。

如果不是这种情况,

份额小ID在Servlet实现的,分析它。

+0

增加执行 – 2012-08-16 14:33:28

相关问题