Файлы cookie Java: как управлять сеансом сервлета Java с помощью файлов cookie
Опубликовано: 2020-08-19
Веб-страницы не имеют воспоминаний. Пользователь, переходящий со страницы на страницу, будет рассматриваться веб-сайтом как совершенно новый посетитель. Сеансовые файлы cookie позволяют веб-сайту, который вы посещаете, отслеживать ваше перемещение со страницы на страницу, чтобы у вас не запрашивалась та же информация, которую вы уже предоставили сайту.
Файлы cookie позволяют вам быстро и легко просматривать многие страницы сайта без необходимости аутентификации или повторной обработки каждой новой области, которую вы посещаете.
Но иногда в веб-приложениях Java мы должны знать, кто является клиентом, и соответствующим образом обрабатывать запрос.
Например, приложение корзины покупок должно знать, кто отправляет запрос на добавление товара и в какую корзину этот товар должен быть добавлен, или кто отправляет запрос на оформление заказа, чтобы оно могло взимать сумму с правильного клиента.
Сеанс — это состояние диалога между клиентом и сервером, и он может состоять из нескольких запросов и ответов между клиентом и сервером. Поскольку HTTP и веб-сервер не имеют состояния, единственный способ поддерживать сеанс — это когда некоторая уникальная информация о сеансе (идентификатор сеанса) передается между сервером и клиентом в каждом запросе и ответе.

Теперь давайте создадим простой динамический веб-проект в Eclipse, в котором объясняется управление сеансом сервлета Java с использованием файлов cookie.
Вот шаги:
- Создать динамический веб-проект:
CrunchifySessionManagementByCookie
-
crunchify-login.html
: Создать страницу приветствия приложения. -
CrunchifyLoginServlet.java
— обрабатывает запрос на вход -
CrunchifyLogoutServlet.java
— отвечает за запрос выхода из системы. -
web.xml
— файл дескриптора развертывания (не видите web.xml? следуйте этому руководству) -
CrunchifyLoginSuccessful.jsp
— Запрос об успехе перенаправляется наLoginSuccess.jsp
, этот файл cookie будет использоваться там для отслеживания сеанса. Также обратите внимание, что время ожидания файла cookie установлено на 60 минут.

Другой должен прочитать:
- Пример/учебник Spring MVC: Hello World — Spring MVC 3.2.1
- Как обновлять график Sparkline каждые 3 секунды в Spring MVC (обновление в реальном времени)
1. crunchify-login.html
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 |
< ! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=US-ASCII" > < title > Crunchify Login Form - Session Management by Cookies < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/bg.png' ) ; } </style> < / head > < body > < div align = "center" > < br > < br > < form action = "CrunchifyLoginServlet" method = "post" > Enter Your Username : < input type = "text" name = "crunchifyUser" > < br > Enter Your Password : < input type = "password" name = "crunchifyPassword" > < br > < br > < br > < input type = "submit" value = "Login" > < / form > < / div > < / body > < / html > |
2. CrunchifyLoginServlet.java
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 |
package com . crunchify . tutorials ; import java . io . IOException ; import java . io . PrintWriter ; import javax . servlet . RequestDispatcher ; import javax . servlet . ServletException ; import javax . servlet . annotation . WebServlet ; import javax . servlet . http . Cookie ; import javax . servlet . http . HttpServlet ; import javax . servlet . http . HttpServletRequest ; import javax . servlet . http . HttpServletResponse ; /* * Author: Crunchify.com * */ /** * Servlet implementation class LoginServlet */ @WebServlet ( "/CrunchifyLoginServlet" ) public class CrunchifyLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L ; private final String userID = "CrunchifyUser" ; private final String password = "CrunchifyPassword" ; protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { // get request parameters for userID and password String crunchifyUser = request . getParameter ( "crunchifyUser" ) ; String pwd = request . getParameter ( "crunchifyPassword" ) ; if ( userID . equals ( crunchifyUser ) && password.equals(pwd)) { Cookie crunchifyCookie = new Cookie("crunchifyUser", crunchifyUser); // setting cookie to expiry in 60 mins crunchifyCookie . setMaxAge ( 60 * 60 ) ; response . addCookie ( crunchifyCookie ) ; response . sendRedirect ( "CrunchifyLoginSuccess.jsp" ) ; } else { RequestDispatcher rd = getServletContext ( ) . getRequestDispatcher ( "/crunchify-login.html" ) ; PrintWriter out = response . getWriter ( ) ; out . println ( "<font color=red>Please make sure you enter UserID/Pass as \"CrunchifyUser : CrunchifyPassword\".</font>\n" ) ; rd . include ( request , response ) ; } } } |
3. CrunchifyLogoutServlet.java
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 |
package com . crunchify . tutorials ; import java . io . IOException ; import javax . servlet . ServletException ; import javax . servlet . annotation . WebServlet ; import javax . servlet . http . Cookie ; import javax . servlet . http . HttpServlet ; import javax . servlet . http . HttpServletRequest ; import javax . servlet . http . HttpServletResponse ; /* * Author: Crunchify.com * */ /** * Servlet implementation class LogoutServlet */ @WebServlet ( "/CrunchifyLogoutServlet" ) public class CrunchifyLogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L ; protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { response . setContentType ( "text/html" ) ; Cookie loginCookie = null ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies ! = null ) { for ( Cookie cookie : cookies ) { if ( cookie . getName ( ) . equals ( "crunchifyUser" ) ) { loginCookie = cookie ; break ; } } } if ( loginCookie ! = null ) { loginCookie . setMaxAge ( 0 ) ; response . addCookie ( loginCookie ) ; } response . sendRedirect ( "crunchify-login.html" ) ; } } |
4. веб.xml
1 2 3 4 5 6 7 8 9 10 |
<? xml version = "1.0" encoding = "UTF-8" ?> < web - app xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xsi : schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0" > < display - name > CrunchifySessionManagementByCookie < / display - name > < welcome - file - list > < welcome - file > crunchify - login . html < / welcome - file > < / welcome - file - list > < / web - app > |
5. CrunchifyLoginSuccessful.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 |
<% @ page language = "java" contentType = "text/html; charset=US-ASCII" pageEncoding = "US-ASCII" %> < ! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=US-ASCII" > < title > Crunchify - Login Successful - Session management by Cookies < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/bg.png' ) ; } </style> < / head > < body > < div align = "center" > < br > < br > <% String userName = null ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies ! = null ) { for ( Cookie cookie : cookies ) { if ( cookie . getName ( ) . equals ( "crunchifyUser" ) ) userName = cookie . getValue ( ) ; } } if ( userName == null ) response . sendRedirect ( "crunchify-login.html" ) ; %> < h3 > Hi <%= userName %> , Login successful . < / h3 > < br > < form action = "CrunchifyLogoutServlet" method = "post" > < input type = "submit" value = "Logout" > < / form > < / div > < / body > < / html > |
Теперь давайте запустим этот пример:
- Разверните проект
CrunchifySessionManagementByCookie
на Tomcat и запустите Tomcat.

- Укажите URL-адрес вашего браузера на http://localhost:8080/CrunchifySessionManagementByCookie/crunchify-login.html.

- Страница успеха

- Неудачная страница входа

Теперь, как проверить, правильно ли установлен ваш файл cookie.

Попробуйте загрузить любое Cookie Manager Extension
, и вы должны увидеть файл Cookie
в своем браузере, как показано ниже.

Дайте мне знать, если вы столкнетесь с какой-либо проблемой, работающей над кодом управления файлами cookie Servlet.