Сохранение и получение данных сессии
Интерфейс HttpSession предоставляет методы, которые сохраняют и возвращают данные:
Пример Duke's Bookstore использует прослеживание сессии для того, чтобы хранить информацию о книгах в корзине для покупок пользователя. Вот пример сервлета CatalogServlet получающего идентификатор пользовательской сессии, который получает и устанавливает данные, соответствующие сессии этого пользователя:
public class CatalogServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Получаем сесию пользователя и корзину для покупок
HttpSession session = request.getSession(true); ShoppingCart cart = (ShoppingCart)session.getValue(session.getId());
// Если у пользователя нет корзины, создаем ее
if (cart == null) { cart = new ShoppingCart(); session.putValue(session.getId(), cart);
} ... } }
Потому как объект может быть ассоциирован с сессией, пример Duke's Bookstore
хранит книги отобранные пользователем в объекте. Этот объект типа ShoppingCart и каждая книга, отобранная пользователем, хранится в корзине для покупок, то есть в объекте ShoppingCartItem. Например, вот, что получается в таком случае в методе doGet сервлета CatalogServlet:
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(true); ShoppingCart cart = (ShoppingCart)session.getValue(session.getId()); ... // Смотрим есть ли покупки в корзине
String bookId = request.getParameter("Buy");
// Если пользователь хочет добавить книгу, добавляем и пишем ответ
String bookToAdd = request.getParameter("Buy"); if (bookToAdd != null) { BookDetails book = database.getBookDetails(bookToAdd);
cart.add(bookToAdd, book);
out.println("<p><h3>" + ...); } }
В заключении, отметим, что сессия может быть разработана как новая. Новая сессия - если метод isNew класса HttpSession возвращает true, показывает, например, что, клиент не устанавливал сессию еще. С новой сессий данные еще не ассоциированы.
Вам надо разобраться с ситуациями вызывающими новые сессии. В примере Duke's Bookstore
приведенном выше, если у пользователя нет корзины для покупок (единственные данные ассоциированные с сессией), сервлет создает ему новую. С другой стороны, если Вам нужна информация пользователя, чтобы открыть сессию (такая как имя пользователя), Вы, возможно, перенаправите пользователя на "стартовую страницу", где возьмете всю необходимую информацию.