Создание файла cookie сеанса внутри контроллера - PullRequest
4 голосов
/ 01 мая 2011

Я новичок в Tomcat, сервлетах и ​​Spring Web.Я пришел из PHP, поэтому я немного дезориентирован, если не сказать больше.Я хочу, чтобы контроллер создал для меня cookie-файл сеанса.

Мне сказали, что я могу получить такой сеанс в стандартном сервлете:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  // Somewhere inside the method...
  HttpSession session = request.getSession(true);

  // Set a cookie
      session.setAttribute("hello", "world");

  // More stuff...
}

Как это перевести наSpring Web MVC способ делать вещи?Могу ли я создать сеансовые куки в контроллере?

Ответы [ 3 ]

6 голосов
/ 16 марта 2012

То, что вы делаете в своем примере, не имеет ничего общего с файлами cookie.session.setAttribute ("ключ", значениеObject);Устанавливает java-объект в сеансе.Сессия хранится на сервере.Сессионный идентификатор - это единственное, что сообщается клиенту.Это может быть файл cookie или URL-адрес.Атрибуты в сеансе не сериализуются в строки.

С другой стороны, файлы cookie - это строки, которые отправляются обратно клиенту.Клиент несет ответственность за сохранение своих файлов cookie (а некоторые люди отключают их) и их возврат на сервер.

Установка значения файла cookie из сложного графа объектов потребует сериализации и десериализации.Атрибут сеанса не будет.

Если вы хотите прочитать cookie, используйте это:

@CookieValue("key") String cookie

В списке параметров контроллера.Переменная cookie будет заполнена значением из файла cookie с именем «key».

Чтобы установить cookie, вызовите:

response.addCookie(cookie);
4 голосов
/ 01 мая 2011

В Java-сервлетах (и, в частности, Spring MVC) вы не взаимодействуете непосредственно с cookie-файлами сеанса, фактически правильно написанное приложение на основе сервлетов должно работать без включенных cookie-файлов, автоматически возвращаясь к идентификатору сеанса на основе URL.

Способ, который вы указали, верен, хотя Spring предоставляет вам намного более качественные (более высокие уровни) подходы, такие как bean-объекты для сессии.Таким образом, вы никогда не будете взаимодействовать с самой сессией.

2 голосов
/ 01 мая 2011

Вы можете получить доступ к объекту HttpSession, включив его в качестве параметра в методы вашего контроллера:

public String get(Long id, HttpSession session) {

}

Spring будет внедрять текущий объект HttpSession для вас, и оттуда вы можете установитьатрибуты (как вы сделали в своем вопросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...