Об'єкт сесії в WEB-додатку має важливе значення. При використанні фреймворка Struts2 можна використовувати сесію інтерфейсу ServletRequest, який розширюється інтерфейсом HttpServletRequest. Метод getSession (boolean create) даного інтерфейсу повертає об'єкт типу HttpSession поточного сеансу клієнта. Якщо параметр create дорівнює true і об'єкт HttpSession не існує, то створюється новий об'єкт HttpSession.
інтерфейс SessionAware
Незважаючи на можливість використання сесії інтерфейсу HttpSession необхідно все ж використовувати об'єкт сесії фреймворка. Для цього необхідно створити дію, яке успадковує інтерфейс SessionAware. Інтерфейс SessionAware містить метод setSession, який відкриває нам доступ до сесії фреймворка. Параметром методу setSession є об'єкт типу Map
Приклад використання SessionAware в Struts2 додатку
У додатку створимо дію LoginAction.java. Основна функція даного action полягатиме в тому, щоб перевірити заповнення текстових полів сторінки index.jsp. Якщо користувач заповнить текстові поля, то метод execute () розмістить об'єкт User в сесії і поверне строкове значення "success", якщо не заповнить - то "error". Залежно від результату дії фреймворк буде відкривати або сторінку success.jsp, або error.jsp.
На наступному скріншоті представлена структура проекту StrutsSession.
На сторінці дескриптор додатки web.xml не описується. Лістинг web.xml можна побачити на сторінці Приклад Struts2. де розглядається питання кодування переданих сервера повідомлень.
Лістинг action классa LoginAction.java
Дія LoginAction переопределяет функцію execute. Як тільки буде звернення до цього дійства Struts2 відразу ж викличе його метод execute, який перевірить поля "userName" і "password", і, в залежності від стану, поверне або "success", або "error".
На сторінці перевірки даних показано, як використовувати метод validate () для перевірки введених даних користувача.
Фреймворк викликає метод setSession. в якому ми визначаємо нашу змінну session. Якщо поля "userName" і "password" будуть заповнені, то метод створить об'єкт User і розмістить його в сесії session. Структура об'єкта User наводиться в наступному лістингу.
Об'єкт користувача User.java
Лістинг JSP-сторінки index.jsp
На цій сторінці оператор повинен ввести "Логін", "Пароль" і натиснути кнопку Submit. При натисканні на кнопку серверу передається інформація сторінки (userName, password) і викликається дію "login".
В рядку <%@ taglib uri="/struts-tags" prefix="s" %> підключаються теги Struts2. після чого звернення до об'єктів фреймворка проводиться через префікс "s". У тілі сторінки визначено декілька тегів Struts2. У першому тезі форми
Слід зазначити, що дія розташовується в "закритій області" namespace (private).
Інтерфейс сторінки представлений на наступному скріншоті.
Файл конфігурації struts.xml
Підключення дії здійснюється в файлі конфігурації struts.xml. в якому необхідно визначити зв'язок сторінки index.jsp з дією "login".
У файлі конфігурації визначено, що дія "login" пов'язано з класом example.LoginAction. Залежно від результату (result) виконання дії буде відкрита або сторінка private / success.jsp, або error.jsp. У файлі конфігурації ми визначили, що дія login розташовується в закритій області (namespace) private.
Лістинг сторінки success.jsp
У разі успішного виконання дії "private / login" сервер відкриє сторінку success.jsp, інтерфейс якої представлений на наступному скріншоті.
Сторінка success.jsp використовує тільки теги JSP для відображення об'єкта User. Спочатку необхідно цей об'єкт імпортувати на сторінку, після чого витягти його з сесії.
Лістинг сторінки error.jsp
Сторінка помилки error.jsp виконує тільки одну функцію - повідомляє користувачеві, що одне з полів залишилося не заповнено.
Тексти програм розглянутого прикладу можна скачати тут (5.20 Мб).