Использование Cookies в Spring MVC. Конфигурация CoockieLocaleResolver в Spring MVC
Пример использования Cookies в приложении Spring MVC. Настройка CoockieLocaleResolver в Spring MVC.
Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Используемые технологии и библиотеки
- Spring MVC 4.2.4.Release
- Maven 3.2.5
- IntelliJ IDEA 15.0.2
1. Описание задачи
Рассмотреть работу с cookie в приложении Spring MVC. Создание cookie, чтение и запись куки в response.
2. Структура проекта
Как обычно используется класс контроллер (CookieController) и jsp представление для него (cookieView.jsp).
3. Файлы конфигурации Spring
Для работы с cookie никаких дополнительных настроек относительно предыдущих частей добавлено не было. Так же не требуется добавления каких-либо зависимостей библиотек. Поэтому смотрите интересующие файлы конфигурации в предыдущих частях или скачайте исходный код приложения в конце статьи.
4. Контроллер
CookieController:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package ru.javastudy.mvcHtml5Angular.mvc.cookie; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created for JavaStudy.ru on 03.03.2016. */ @Controller public class CookieController { @RequestMapping(value = "/readCookie", method = RequestMethod.GET) public ModelAndView readCookieExample(@CookieValue(value = "cookieName", required = false) Cookie cookieName, HttpServletRequest request) { System.out.println("CookieController readCookieExample() is called"); //you can use also " @CookieValue(value = "cookieName") String cookieName " >cookieName = Cookie.getName(); String cookieValue = "cookie with name 'cookieName' is empty"; if (cookieName != null) { cookieValue = "Object: " + cookieName + ";<br/> Name: " + cookieName.getName() + ";<br/> Value: " + cookieName.getValue(); } return new ModelAndView("/cookie/cookieView", "cookieValueObj", cookieValue); } @RequestMapping(value = "/writeCookie", method=RequestMethod.GET) public String writeCookieExample (HttpServletRequest request, HttpServletResponse response) { System.out.println("CookieControllerExample writeCookieExample() is called"); Cookie cookie = new Cookie("cookieName", request.getRequestURL().toString()); cookie.setMaxAge(3600); response.addCookie(cookie); System.out.println("Object: " + cookie + "; Name: " + cookie.getName() + "; Value: " + cookie.getValue()); return "/cookie/cookieView"; } @RequestMapping(value = "/readAllCookies", method=RequestMethod.GET) public ModelAndView readAllCookiesExample(HttpServletRequest request) { System.out.println("CookieControllerExample readAllCookiesExample() is called"); Cookie[] cookies = request.getCookies(); System.out.println("All Cookies in your browsers"); String cookiesStr = ""; for(Cookie cookie : cookies){ System.out.println(cookie.getName() + " : " + cookie.getValue()); cookiesStr += cookie.getName() + " : " + cookie.getValue() + " : " + cookie + "<br/>"; } return new ModelAndView("/cookie/cookieView", "cookieValueObj", cookiesStr); } } |
Метод readCookieExample() в качестве аргумента использует аннотацию @CookieValue(value = ‘cookieName’). С помощью такой записи будет выполнен поиск cookie с соответствующим именем и значение будет записано в переменную Cookie cookieName. Атрибут required = false позволяет избежать исключения, которое будет возникать в случае отсутствия cookie.
Метод writeCookieExample() создает cookie с временем жизни 1ч и записывает в ответ клиенту.
Метод readAllCookiesExample() читает все cookie, которые на данный момент существуют в запросе.
5. Представление .jsp
cookieView.jsp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="page" tagdir="/WEB-INF/tags" %> <page:template> <jsp:body> <!-- Page Content --> <div class="container"> <!-- Page Heading/Breadcrumbs --> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Сохранение объекта <small>в session, request, view scope</small> </h1> <ol class="breadcrumb"> <li><a href="index.html">Home</a> </li> <li class="active">Пример работы с scope</li> </ol> </div> </div> <!-- /.row --> <c:url value="/writeCookie" var="writeCookie" /> <c:url value="/readCookie" var="readCookie" /> <c:url value="/readAllCookies" var="readAllCookies" /> <!-- Content Row --> <div class="row"> <!-- Sidebar Column --> <div class="col-md-3"> <div class="list-group"> <a href="/index.html" class="list-group-item">Home</a> <a href="${writeCookie}" class="list-group-item">Записать cookie</a> <a href="${readCookie}" class="list-group-item">Прочитать cookie</a> <a href="${readAllCookies}" class="list-group-item">Прочитать все cookies</a> </div> </div> <!-- Content Column --> <div class="col-md-9"> CookieValue: <br /> <b> ${cookieValueObj} </b> <br/> <br/> CookieValue in response: <br/> <b>Cookie value ${cookie.cookieName.value} </b> <br/> <b>Cookie name: ${cookie.cookieName.name} </b> <br/> <b>Cookie: ${cookie.cookieName} </b> <br/> </div> </div> <!-- /.row --> <hr> </div> <!-- /.container --> </jsp:body> </page:template> |
В представлении нет ничего необычного. Просто выводятся на новой строчке переменные ${cookie.cookieName), где cookieName — имя, заданное в контроллере.
6. Запуск приложения
После запуска вы можете открыть консоль разработчика в браузере и посмотреть значения cookie.
Исходные коды
MVC_AngularJS_Html5 full project — полный проект Spring MVC + AngularJS + Bootstrap + HTML5.
13. Cookies — код для этой части