Где хранить данные в web- приложении page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Static Java class / Singleton База данных / Файловая система Cookies *.setAttribute(name, value); *.getAttribute(name) // value
Механизм работы HTTP- сессии Set-Cookie: JSESSIONID=123456; path=/myapp JSESSIONID нет в HTTP заголовке новый пользователь. генерируем JSESSIONID сохраняем в памяти сервера Можно добавить свой объект в сессию: Request.getSession().setAttribute(user, John) GET Cookie: JSESSIONID= JSESSIONID найден Пользователь уже заходил Все объекты в сессии сохранились: Request.getSession().getAttribute(user) // John
Альтернативы?
Model View Controller (MVC) Model Модель отображаемых данных Controller Контроллер запроса пользователя View Шаблон представления данных 1. Получает или сохраняет модель в БД 2. Определяет нужное view и передает ему управление 3. Накладывает модель на шаблон представления
Model View Controller в Web-приложении Model Модель отображаемых данных Controller Контроллер запроса пользователя View Шаблон представления данных - Java beans классы -классы с get/set методами) - Java Server pages или - XSLT или - Velocity - … - Java классы приложения Front Controller Диспетчер запросов от пользователей Controller Контроллер запроса пользователя Controller Контроллеры конкретных запросов - DispatcherServlet (всегда один) View Шаблон представления данных View Шаблоны представления данных Model Модель отображаемых данных Model Модель отображаемых данных Services Сервисы приложения Services Сервисы приложения Services Сервисы приложения - Java классы с логикой приложения 1. HTTP-запрос 2. Ищет конкретный контроллер и передает ему управление 3. Получает данные из БД 4. Заполняет модель данными5. Выбирает нужное view и передает ему модель и управление 6. Накладывает модель на шаблон, получая HTML-страницу
Архитектура слоев приложения UI Layer Слой интерфейса пользователя отвечает за взаимодействие с пользователем ViewsControllers Service Layer Слой сервисов приложения отвечает за выполнение бизнес- логики приложения Services Data Access Layer Отвечает за работу приложения с БД Data Access Objects (DAOs) Domain Model Объектная модель данных приложения Domain entities X X
Задачи 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)