Где хранить данные в webприложении *.setAttribute(“name”, value); *.getAttribute(“name”) // value page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Cookies Static Java class / Singleton База данных / Файловая система Механизм работы HTTPсессии http://mysite.org/myapp JSESSIONID нет в HTTP заголовке новый пользователь. генерируем JSESSIONID сохраняем в памяти сервера Set-Cookie: JSESSIONID=123456; path=/myapp GET http://mysite.org/myapp Cookie: JSESSIONID=123456 Можно добавить свой объект в сессию: Request.getSession().setAttribute(“user”, “John”) JSESSIONID найден Пользователь уже заходил Все объекты в сессии сохранились: Request.getSession().getAttribute(“user”) // John Альтернативы? Model View Controller (MVC) 3. Накладывает модель на шаблон представления Model View Модель отображаемых данных Шаблон представления данных 2. Определяет нужное view и передает ему управление 1. Получает или сохраняет модель в БД Controller Контроллер запроса пользователя Model View Controller в Web-приложении Model Model Модель отображаемых Model Модель отображаемых данных 6. Накладывает модель на шаблон, получая HTML-страницу Модельданных отображаемых данных View ШаблонView представления View Шаблонданных представления Шаблоны представления данных данных 4. Заполняет модель данными - Java beans классы -классы с get/set методами) 5. Выбирает нужное view и передает ему модель и управление Controller Controller Controller - Java классы с логикой приложения Контроллер запроса Контроллер запроса Контроллеры конкретных пользователя пользователя запросов Services Services Services Сервисы приложения Сервисы Сервисыприложения приложения - Java Server pages или - XSLT или - Velocity - … - Java классы приложения 3. Получает данные из БД 2. Ищет конкретный контроллер и передает ему управление 1. HTTP-запрос Front Controller Диспетчер запросов от пользователей - DispatcherServlet (всегда один) Архитектура слоев приложения UI Layer Слой интерфейса пользователя отвечает за взаимодействие с пользователем Controllers Views Domain Model Объектная модель данных приложения X Service Layer X Слой сервисов приложения отвечает за выполнение бизнеслогики приложения Services Data Access Layer Отвечает за работу приложения с БД Data Access Objects (DAOs) Domain entities Задачи MVC-движка • Реализация MVC: Диспетчер, контроллеры, представления • Binding (конвертация HTTP-параметров в объекты Java - модели) • Validation (проверка данных модели) • Поддержка различных типов представлений (JSP, XSLT, Velocity, Freemarker, Word, Excel) • I18n / L10n • Security (Authorization – проверка прав доступа) • JSP-теги для удобства работы с всеми возможностями, описанными выше MVC-движки (миграция подходов идей) MVC Дополнения к MVC • IoC контейнер: Spring, либо включен в движок • Управление навигацией по сайту: Spring WebFlow • Поддержка со стороны JavaScript: jQuery • Security: Spring Security Альтернатива Web-MVC: Rich UI Component/Event driven компонентные событийно ориентированные движки – Java Server Faces (JSF) – Google Web Toolkit (GWT) / Vaadin – Classic ASP.NET + Плюсы - Минусы Библиотеки компонент Много сгенерированного JavaScript Событийно ориентированные интерфейсы более интуитивные Плохо ложится на HTTP-протокол => сложная внутренняя реализация. Высокая связность страниц веб приложения Возможность хорошей поддержки для среды визуального программирования обманчивая внешняя простота MVC в мире Rich UI • MVP (Model View Presenter) – MVC подход для событийно ориентированных UI библиотек (Java Swing/SWT, GWT/Vadin, C# WinForms, ASP.NET) • MVVM (Model View ViewModel) – MVC подхода для событийно ориентированных UI библиотек с хорошей поддержкой Data Binding (Silverlight/WPF)