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

Java GWT客户端获取错误响应,这是获取的另一个请求,java,gwt,servlets,request,Java,Gwt,Servlets,Request,我在GWT应用程序中发现了一个问题,当我使用一个用户打开两个GWT客户端并调用同一个服务器方法时,一个客户端获得的数据与另一个客户端相同,但这是错误的。 如何避免这个问题 例如: 我打开一个页面做加法计算1+1并从服务器方法add()获得答案,同时,我打开另一个页面做加法计算2+2并从同一个服务器方法获得答案,我也得到了相同的答案,即1+1=2和2+2=2。 我的英语不够好,不能更清楚地描述这个问题 顺便说一下,我使用全局变量在servlet中存储数据 另一个例子: public class C

我在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”,第二个返回错误消息。

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

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

    @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"); 
   ...
   }

描述有点模糊。什么数据?一个用户打开两个GWT客户端意味着什么,你是在两个不同的浏览器选项卡中打开同一个应用程序,还是其他什么?谢谢你的回答,我有一个测试用例:我的ServiceImpl类有一个变量——私有字符串serviceInstanceId=“”;在这个类中,有一个函数:public TestRender initOne2One(String oid){if(serviceInstanceId.length()>0){//return render with error message;}serviceInstanceId=“test”;}当初始化客户端小部件时,将调用这个函数,但测试结果是第一次调用,没有错误消息,同一用户从不同客户机进行的第二次调用,返回错误消息。我认为一个客户机请求应该连接到一个独立的服务器实例。错了吗?如果错误,在计算复杂问题时,如何存储流程数据?如果add()函数只是我的第一步,那么如何存储它的结果以供下一步使用呢?假设每个Impl类只有一个实例。我在回答中添加了一个代码片段,用于在会话中存储数据。GWT是否可以将一个客户端请求连接到一个独立的服务器实例?我必须在一台服务器上存储大量的流程数据才能快速获取它们。您可以在会话中存储包含必要成员和方法的对象。然后在servlet类中,从会话中获取对象并调用所需的方法。