Веб-програмування на Java: відмінності між версіями

Вилучено вміст Додано вміст
Рядок 333:
 
Утримавши доступу до менеджера прикладень, ви зможете побачити скільки сесій запущено для певного веб-прикладення.
 
Термін Сесія застосовується до взаємодії сервера і користувача від моменту перегляду першої сторінки на сервері до закриття браузера або ж до закінчення часу відведеного для сесії з користувачем від останнього його звернення до сервера (переважно 30 хв.).
 
Коли користувач працює з вашим сайтом, сервер підтримує сесію за посередництвом кукі (англ. cookie – дослівно. печиво, коржик). Коли Tomcat отримує HTTP запит від клієнта, він перевіряє чи запит містить кукі за назвою по замовчуванню JSESSIONID. Якщо кукі не знайдено, то створюється кукі з унікальним значенням і воно додається до HTTP-відповіді. Це і знаменує собою початок сесії. Все це відбувається автоматично і не потрібно реалізовувати самому. Якщо браузер приймає куки, він додаватиме їх до усіх наступних запитів до цього серверу.
 
Також кукі можна створювати самому, вони використовуються для збереження і передачі часто вводимих даних на стороні користувача, проте у браузері користувач може відключати можливість використання кукі, тому потрібно або попереджати користувача, щоб увімкнув їх, або ж писати код сторінок так, щоб можна було обходитися без кукі.
Переглянути ID сесії можна так:
<source lang="java"><%
HttpSession session1=request.getSession();
String s=session1.getId();
out.println(s);
%></source>
В результаті в браузері буде виведено ряд чисел, на зразок: E873633EC113311CA0306882A0143936
 
Що дає нам сесія? Основна мета сесії – це передача певних даних між різними JSP сторінками та сервлетами, що пов’язані з певним користувачем. З програмної точки зору, сесія – це спеціальний об’єкт в якому ми можемо зберігати ім’я змінної та її значення, або ж навіть цілий об’єкт. Наступний рядок демонструє як зберегти певне значення:
 
<source lang="java">session.setAttribute("MyAppOperator", "");</source>
 
І коли потрібно отримати значення можна скористатися відповідним методом getAttribute:
<source lang="java">
boolean isOperator = (session.getAttribute("MyAppOperator") != null);
if (isOperator) { ...
</source>
Наступний приклад демонструє використання сесійної змінної для підрахування звернень до сторінки під час сесії:
<source lang="java"><%
String s=request.getSession().getId();
out.println("ID="+s);
Long k=(Long)session.getAttribute("Counter");
 
if (k==null) k=1L;
else k=k+1L;
session.setAttribute("Counter", k);
k=(Long)session.getAttribute("Counter");
out.println("<br/> k="+k);
 
%></source>
 
Просто вставте даний код у JSP сторінку.
 
Зауважте, що лічильник збільшується при кожному зверненні до сторінки, допоки браузер не буде закритий.
 
Якщо вкінці добавити рядок:
 
<source lang="java">session.invalidate();</source>
 
то кожного разу буде відкриватися нова сесія. Метод invalidate так би мовити «вбиває» сесію. Також можна встановити максимальний інтервал неактивності. Як вже було сказано по замовчування через пів години бездіяльності користувача, сесію буде закрито. Проте це можна змінити:
<source lang="java">
session.setMaxInactiveInterval(60*60*24); // один день
session.setMaxInactiveInterval (-1); // допоки не буде закритий браузер
</source>
 
При необхідності можна перебрати усі атрибути, що зберігає сесія таким чином:
<source lang="java">
Enumeration names=session.getAttributeNames();
while (names.hasMoreElements())
{
out.println((String) names.nextElement());
}
</source>
 
==Рекомендована література==