- •Тема 1. Разработка простейших веб-приложений
- •Тема 2. Взаимодействие с сервлетом
- •Тема 3. Контекст сервлета
- •Тема 4. Веб-сессия
- •Тема 5. Фильтры и взаимодействие сервлетов
- •Тема 6. Безопасность веб-приложений
- •Тема 7. Введение в JSP
- •Тема 8. Встроенные объекты JSP
- •Тема 9. Стандартные действия и JavaBeans
- •Тема 10. Выражения JSP Expression Language
- •Тема 11. JSP Standard Tag Library
- •Тема 12. Локализация веб-приложений
- •Тема 13. Настраиваемые теги JSP
- •Тема 14. Взаимодействие с БД в веб-приложениях
- •Тема 15. Запросы к БД
Учебное пособие по web-программированию (2013)
Рисунок 3.4.
При этом чтение параметров инициализации в данном примере может быть выполнено с использованием следующих методов (конечно, в рамках сервлета):
ServletConfig config = getServletConfig();
String driverclass = config.getInitParameter("driverclass"); String jdbcURL = config.getInitParameter("jdbcURL"); String user = config.getInitParameter("user");
String password = config.getInitParameter("pass");
Тема 4. Веб-сессия
Способы прослеживания сессии. Подходы к работе с Cookies и HttpSession. Отличия между методами GET и POST. Способы реализации слушателей атрибутов сессии и создания-удаления сессии.
Важная особенность HTTP в том, что он не хранит состояние. Преимущества:
-упрощение реализации сервера Недостатки:
-необходима передача дополнительной информации в каждом запросе
-нет гарантии, что вся информация доставлена клиенту
Пример передачи информации в запросе приведён на рисунке 4.1.
-19-
Учебное пособие по web-программированию (2013)
Рисунок 4.1.
Существует два метода передачи параметров GET и POST. Однако, с точки зрения сервлета параметры, передаваемые по GET и POST ничем не отличаются. Однако с точки зрения пользователя он видит либо длинный URL, либо короткий (сравните рисунок 4.2 и 4.1). Если на странице, в которой методом POST передавались параметры нажать кнопку «Обновить страницу», то браузер выдаст запрос о необходимости повторной передачи параметров.
Рисунок 4.2.
При взаимодействии с сервером можно параметры, которые будут редко изменяться, сохранять в Cookies. Концепция Cookies (рисунок 4.3):
С сервера передаётся javax.servlet.http.Cookie — одна или более пар имязначение
Cookie сохраняется на клиенте и присоединяется к каждому запросу
Проблема: не все браузеры разрешают Cookie
Создание Cookie осуществляется с использованием конструктора public Cookie(String name, String value)
Основные методы javax.servlet.http.Cookie:
public int getMaxAge()
- получение максимального времени существования Cookie в секундах
public String getValue()
-20-
Учебное пособие по web-программированию (2013)
-получение значения
public String getPath()
-получение пути
public String getName()
-получение имени
public void setMaxAge(int secondExpire)
-установка времени устаревания
public void setValue(String value)
-установка значения
public void setPath(String uri)
-установка пути
Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/http/Cookie.html
Чтение Cookie осуществляется методом HttpServletRequest: public Cookie[] getCookies()
Отправка — методом HttpServletResponse: public void addCookie(Cookie cookie)
Пример работы с Cookie.
Шаг 1. Создаём страницу, которая запрашивает имя пользователя (рисунок
4.3).
Рисунок 4.3.
Шаг 2. Пишем сервлет, в котором обрабатываем возможность получения Cookie в запросе (рисунок 4.4). Если получено значение в Cookie, то оно обрабатывается, иначе — выдаётся запрос на ввод информации. В учебных целях при создании Cookie устанавливаем короткое время жизни (в данном примере — 15 секунд).
-21-
Учебное пособие по web-программированию (2013)
Рисунок 4.4.
Шаг 3. В результате получаем запрос информации от пользователя только при устаревании Cookie (рисунок 4.5).
Рисунок 4.5.
Дополнительную информацию можно получить по адресу:
-22-
Учебное пособие по web-программированию (2013)
http://www.tutorialspoint.com/servlets/servlets-cookies-handling.htm
Кроме Cookies информацию можно хранить в сессии javax.servlet.http.HttpSession:
public Object getAttribute(String name)
-получение атрибута по имени
public String getId()
-получение уникального идентификатора сессии
public int getMaxInactiveInterval()
-получение максимального времени жизни сессии при отсутствии активности пользователя (пример приведён на рисунке 1.8)
public ServletContext getServletContext()
-получение контекста сервлета
public void invalidate()
-сделать сессию недоступной (используется для защиты информации)
public boolean isNew()
-проверка, что сессия новая
public void setAttribute(String name, Object value)
-установка значения атрибута
public void removeAttribute(String name)
-удаление атрибута
public void setMaxInactiveInterval(int seconds)
-установка максимального времени жизни сессии (в секундах)
Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html
Пример сохранения параметров в сессии приведён на рисунке 4.6.
-23-
Учебное пособие по web-программированию (2013)
Рисунок 4.6.
Добавление, удаление и изменение значения атрибутов сессии может контролироваться с помощью слушателей javax.servlet.http.HttpSessionAttributeListener:
public void attributeAdded(HttpSessionBindingEvent event)
public void attributeReplaced(HttpSessionBindingEvent event)
public void attributeRemoved(HttpSessionBindingEvent event)
Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionAttributeListener.h
tml
В качестве параметра слушателю параметров сессии передаётся объект javax.servlet.http.HttpSessionBindingEvent:
public String getName()
public Object getValue()
Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionBindingEvent.html
Принципы создания слушателей идентичны, описанным в 3 теме.
Кроме параметров сессииможно контролировать процесс создания и удаления сессии. Для данной операции может использоваться
-24-