Как отслеживать сеанс для
каждый запрос сервлета?
Сервер идентифицирует своих пользователей, помечая их с помощью файла cookie, который содержит идентификатор сеанса в их браузерах. На сервере сеанс - это место, где вы размещаете данные, которые необходимо отслеживать во время взаимодействия клиент-сервер (чтобы передать состояние приложению).
session.setAttribute("name", SerializableObject)
Примечание: Поскольку App Engine сохраняет данные сеанса в хранилище данных и в кэше памяти, все значения, хранящиеся в сеансе, должны реализовывать интерфейс java.io.Serializable.
Затем вы можете извлечь сеанс из запроса HttpServletRequest, выполнив
request.getSession()
см. Javadoc: здесь
После извлечения сеанса из вашего сервлета вы используете session.getAttribute("name")
, чтобы получить любые интересующие вас данные, чтобы отслеживать взаимодействие.
Есть ли способ сохранить сеанс глобально для каждого запроса
Зачем хранить его глобально, когда единственная вещь, которая имеет идентификатор для доступа к сеансу, - это сервлет, получивший запрос, пришедший с этим идентификатором сеанса. Не все в вашем приложении должны знать о каждом запросе.
Вот пример запроса , который поставляется с файлом cookie идентификатора сеанса:
GET /something.htm HTTP/1.1
Accept: www/source
Accept: text/html
Cookie: sessid=123456789
Вы не можете хранить эту информацию глобально, она уникальна для каждого запроса.
Без необходимости проходить его
При выполнении полезных действий с данными не передавайте сеанс вашим методам, передавайте полезную информацию, такую как имя пользователя, содержимое корзины и т. Д.
HttpSession session = request.getSession() //inside a servlet
String userName = session.getAttribute("name");
List<ShoppingItems> items= session.getAttribute("cart");
MakeTheUserPay(userName, items) //no session passing here
Ваши методы бизнес-логики не должны даже знать, что такое сессия. Это больше похоже на артефакт.