0

我在我的 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;
}
}

在我的客户端小部件初始化中,调用 testConnection。我打开两个页面进行测试,第一页返回“测试”,第二页返回错误消息。

4

2 回答 2

0

不应该将服务器端的数据存储在全局变量中(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"); 
   ...
   }
于 2013-10-17T11:20:03.760 回答
0

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

于 2013-10-17T10:39:01.340 回答