GWT客户端获得错误响应,这是另一个请求

时间:2013-10-17 08:39:39

标签: java gwt servlets request

我在GWT应用程序中发现一个问题,当我使用一个用户打开两个GWT客户端并调用相同的服务器方法时,一个客户端获取的数据与另一个客户端的数据相同,但这是错误的。 如何避免这个问题。

例如: 我打开一个页面做加上计算1 + 1并从服务器方法add()得到答案,同时,我打开另一个页面做加上计算2 + 2并从同一服务器方法得到答案,我得到了同样的答案1 + 1 = 2和2 + 2 = 2。 我的英语不够清楚地描述这个问题 顺便说一句,我使用全局变量将数据存储在servlet中。

另一个例子:

public class ConfigServiceImpl extends GwtConfigController implements ConfigService {
    private String serviceInstanceId = "";
    public String testConnection() {
     if(serviceInstanceId.trim().length() > 0){
              return "error : serviceInstanceId";
         }
         serviceInstanceId = "test";
         return serviceInstanceId;
}
}

在我的客户端窗口小部件init中,调用testConnection。 我打开两页进行测试,第一页,返回“test”,第二次返回错误信息。

2 个答案:

答案 0 :(得分:0)

您应该编写一个调用方法的servlet,并测试错误是否真的来自客户端:我很确定这是因为您的服务器上的代码:每个网页都有自己的javascript变量,有无法让客户端的两个实例共享变量:就好像我可以通过javascript从用户的打开页面窃取数据(这将是一个严重的安全问题)

答案 1 :(得分:0)

不应该在全局变量(servlet类中的成员?)中存储服务器端的数据。将数据存储在数据库中或(更容易)将其存储在sessions中。因此,数据是特定于用户的,不会在不同用户之间共享:

    @Override
    public void add(int a, int b) {
    HttpServletRequest request = this.getThreadLocalRequest();
    HttpSession session = request.getSession();
    int result = a + b;
    session.setAttribute("aNameForTheValue", result); }


@Override
   public void otherMethod()
    {
    HttpServletRequest request = this.getThreadLocalRequest();
   HttpSession session = request.getSession();
   int addResult=  (int) session.getAttribute("aNameForTheValue"); 
   ...
   }