ArrayList在对服务器的调用之间清空

时间:2015-09-15 02:33:38

标签: java webserver

我正在用Java编写一个XmlRcp服务器,并且我正在尝试使用ArrayList跟踪有效令牌,但出于某种原因,在从客户端到服务器到ArrayList的调用之间重新创建/清空并且没有任何内容。

客户端首先通过将密码传递给服务器来连接到服务器以请求令牌。如果密码正确,服务器会向客户端返回一个令牌,并将该令牌添加到已验证令牌的ArrayList中。然后,客户端发送另一个请求,将消息添加到服务器上不同的字符串ArrayList,但无法验证客户端的令牌,因为持有令牌的ArrayList现在为空。有谁知道为什么会这样?

用于响应客户端调用的两种方法如下所示。

static MessageHandler mess = new MessageHandler(); //has a MessageHander, which is essential and ArrayList of strings that can add a message or get all
static TokenHandler th = new TokenHandler(); //private class that keeps a list of valid tokens to check against - located within this class

public String getAuthToken(String uid, String password) {
    if(!password.equals("test123")){ //tests if the password is correct, if not it doesn't send a token.
        System.out.println("User entered invalid password.");
        return "You must enter a valid password to receive a token.";
    }

    System.out.println("uid: " + uid);
    String token = uid + " 10011";
    th.addToken(token);
    System.out.println("User given token: " + token);
    return token;
}


public String storeMessage(String token, String Message) {
    //validate token
    if(th.validateToken(token)){ //if valid token, then store the message
        System.out.println("msg=" + Message);
        mess.addMessage(Message);
        return "Message succesfully stored.";
    } else { //if the token passed was not valid, then don't store the message.
        return "Invalid token - message could not be stored.";
    }
}

1 个答案:

答案 0 :(得分:1)

每次有新请求时都会重新创建TokenHandler个实例(google"请求范围与会话范围")。为了在调用之间保持状态(保存数据),您应该将其保存到数据库中并添加逻辑以恢复它。

另一种方法是让客户端保存数据。饼干。