2012-08-16 44 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

相關問題