У меня есть приложение GWT, у которого на стороне сервера есть служба RPC.В настоящее время я пытаюсь реализовать поддержку пользователей, и единственный вопрос, который все еще остается, - это способ хранения данных сеанса.
Я храню идентификатор сеанса, используя
getThreadLocalRequest().getSession().setAttribute("sid", "randomSIDgoeshere");
Итак,Первый вопрос больше к сервлетам Java, чем к GWT.Гарантирует ли этот код, что в следующий раз я сделаю вызов, подобный этому:
getThreadLocalRequest().getSession().getAttribute("sid");
Это будет либо ноль (в случае, если он вызывается для пользователя, который еще не посетил фрагмент кода, где атрибут SIDустановлено), или это будет точно такой же SID, который я уже сохранил для этого пользователя.Другими словами, являются ли эти 2 фрагмента кода специфичными для пользователя?(под user я имею в виду один браузер на одном компьютере)
Второй вопрос касается хранения сопоставлений между SID и некоторыми дополнительными данными, такими как идентификатор пользователя.В случае, если у меня есть код, подобный этому:
public class MyGwtServiceImpl extends RemoteServiceServlet implements MyGwtService {
// SID to User ID mappings
private final Map<String, String> sessions =
new HashMap<String, String>();
...
}
Гарантируется ли, что sessions
всегда является одним и тем же объектом для всех запросов, и его данные останутся «живыми», если не завершится все приложение?(Tomcat, например, остановлен) Это нормальный подход, или я должен сохранить все эти сопоставления в моей БД?