logo_M_color

Презентация:



Advertisements
Похожие презентации
Пользовательские действия (custom actions) в JSP. JSTL.
Advertisements

Где хранить данные в web- приложении page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Static Java class.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
1 Паттерны проектирования MVC, MVP, MVVM. 2 Обзор Cхема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения,
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Лекция 1 MVC (Model-View-Controller) - это конструкционный шаблон, который описывает способ построения структуры приложения, сферы ответственности и взаимодействие.
Уровень представления Apache Struts Framework Библиотека тэгов.
Представил студент группы И-52, инженер ЦКТ Руденко Я.В.
JSF/JSP/Tomcat Введение в технологию. JavaServer Faces JSF - фреймворк для веб-приложений, написанный на Java JSF основывается на использовании компонентов.
Симпозиум 2008 Сергей Шутов, ДИМАС Борис Егоров, Интерсистемс Практика использования Zen и Прототип-6.
Платформа разработки ASP.NET Гайдар Магдануров t: e: m: +7.
Java Server Pages (JSP). JSP Позволяет веб разработчикам динамически генерировать HTML, XML - и другие веб страницы. Страницы компилируются JSP- компилятором.
Исполнитель: Утяшева И.А. Научный руководитель: к.ф.-м.н. Винокур В.В.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – обработка ошибок страниц и приложения, Global.aspx.
Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
Jalapeño – эффективная разработка приложений для Java Морозов Максим InterSystems Symposium 2007, Москва 4-5 сентября.
Тема: «Zend Framework. Общие сведения. Реализация паттерна MVC в Zend Framework» Тема: «Zend Framework. Общие сведения. Реализация паттерна MVC в Zend.
Реализация концепции построения и формирования отраслевой системы государственного учета, регистрации и мониторинга (ОСГУРМ) информационных ресурсов сферы.
1. Краткая характеристика MS Access1. Краткая характеристика MS Access 2. Достоинства и недостатки 3. Типы БД 4. Базы данных и системы управления базами.
Какой фреймворк нам нужен для web. Постановка вопроса Зачем нужен web framework? В начале были Servlets & JSP JSF появляется позже он хорош, но не совершенен.
Транксрипт:

Средства разработки web приложений (Web frameworks) Малышкин Фёдор 2 ноября 2007

Содержание Введение Основа архитектуры «тонких» клиентов Средства разработки веб-приложений: JSP Struts Spring Tapestry JSF Сравнение

Введение Данная презентация познакомит Вас с существующими библиотеками разработки веб-приложений на языке Java. Будут описаны основополагающие моменты, лежащие в их основе, приведены примеры их использования, описаны их преимущества и недостатки. Так же будут описаны классические модели реализации «тонких» клиентов, коим веб-приложение и является.

Основа архитектуры «тонких» клиентов В качестве основы для всех клиентов, связанных с пользовательским вводом (не обязательно «тонких»), используется MVC (Model-View-Controller). Эта архитектура разделяет приложение на: Модель данных (Model), занимающуюся хранением данных, обработкой данных (бизнес - логикой), а так же всем остальными «не визуальными» вещами. Представление (View), занимающуюся отображением и представлением данных Контроллер (Controller), занимающийся коммуникацией между данными и представлением. В веб-приложениях данная модель называется «Model-2» (что бы отделить от настольной реализации MVC) и указать, на то что она является приемником «Model-1».

Основа архитектуры «тонких» клиентов

JSP (Краткая характеристика) Положительные стороны: ? Отрицательные стороны: ?

JSP (Жизненный цикл)

Struts (Краткая характеристика) Положительные стороны: Много проектов реализованных с помощью данной библиотеки, подтверждает её стабильность и надёжность Огромное количество примеров и документации HTML библиотека тэгов одна из лучших Отрицательные стороны: Программирование «контроллера» - ActionForms – задача не из лёгких Невозможно автономное тестирование Ходят слухи, что проект «мёртв»

Spring (Краткая характеристика) Положительные стороны: Переопределение правил связки данных на форме и в приложении, правил навигации и проверки введённых значений Прозрачная интеграция с многочисленными средствами представления данных: JSP/JSTL, Tiles, Velocity, FreeMaker, Excel, XSL, PDF. Удобная среда для автономного тестирования Отрицательные стороны: Много XML (в области конфигурирования) Требует большого количества кода в JSP «Слишком» гибок

Spring (Жизненный цикл GET)

Spring (Жизненный цикл POST)

«Контроллер» Spring public class UserController implements Controller { private final Log log = LogFactory.getLog(UserController.class); private UserManager mgr = null; public void setUserManager(UserManager userManager) { this.mgr = userManager; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { if (log.isDebugEnabled()) { log.debug("entering 'handleRequest' method..."); } return new ModelAndView("userList", "users", mgr.getUsers()); }

«Контроллер» Spring public class UserController implements Controller { private final Log log = LogFactory.getLog(UserController.class); private UserManager mgr = null; public void setUserManager(UserManager userManager) { this.mgr = userManager; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { if (log.isDebugEnabled()) { log.debug("entering 'handleRequest' method..."); } return new ModelAndView("userList", "users", mgr.getUsers()); }

Конфигурирование Spring

Конфигурирование Spring

Конфигурирование Spring /users.html=userController

JSP представление Spring : * :

JSP представление Spring : * :

Velocity представление Spring #springFormHiddenInput("user.id" '') #springMessage("user.firstName"): #springFormInput("user.firstName" 'id="firstName"') #springShowErrors(" " "fieldError") #springMessage("user.lastName"): #springFormInput("user.lastName" 'id="lastName"') #springShowErrors(" " "fieldError")

Spring Web Flow Инфраструктура позволяющая определять последовательность переходов между страницами Определяется программно или через XML Правила навигации активируются на основании строковых значений, возвращённых вызванными методами (подобно JSF)

Spring Web Flow

Tapestry (Краткая характеристика) Положительные стороны: Очень эффективна после изучения Шаблоны являются HTML, что очень хорошо для дизайнеров Хорошее сообщество пользователей Отрицательные стороны: Документация достаточно сложна для восприятия Крутая кривая обучения Мало примеров Долгие циклы релизов – ведущие релизы 1-2 раза в год

Tapestry (Жизненный цикл)

Класс Tapestry public abstract class UserForm extends BasePage { public abstract UserManager getUserManager(); public abstract void setUser(User user); public abstract User getUser(); public void save(IRequestCycle cycle) { if (log.isDebugEnabled()) { log.debug("entered 'save' method"); } getUserManager().saveUser(getUser()); UserList nextPage = (UserList) cycle.getPage("users"); nextPage.setMessage(getMessages().format("user.saved", getUser().getFullName())); throw new PageRedirectException(nextPage); }

Конфигурирование Tapestry

Конфигурирование Tapestry

HTML представление Tapestry First Name : Last Name : Birthday :

HTML представление Tapestry First Name : Last Name : Birthday :

HTML представление Tapestry First Name : Last Name : Birthday :

Улучшения в следующей версии Tapestry Богатая поддержка аннотаций Высокий уровень конфигурирования – базирование на IoC контейнере Hivemind Требует меньше кода – более простая реализация классов реализующих логику страниц Поддержка URL дружественных к пользователю Компоненты Tacos AJAX

JSF (Краткая характеристика) Положительные стороны: J2EE Стандарт Быстрая и простая разработка Богата библиотека навигации (аналог Spring Web Flow) Отрицательные стороны: Мешанина из JSP тэгов Плохая поддержка «легковесных» вызовов (REST) Нет единого источника реализации

JSF (Жизненный цикл)

Бин страницы JSF public class UserForm { private String id; public User user = new User(); public UserManager mgr; public void setId(String id) { this.id = id; } public void setUser(User user) { this.user = user; } public void setUserManager(UserManager userManager) { this.mgr = userManager; } public String edit() { if (id != null) { // assuming edit setUser(mgr.getUser(id)); } return "success"; }

Конфигурация JSF org.springframework.web.jsf.DelegatingVariableResolver en es messages /userForm.jsp cancel /userList.jsp success /userList.jsp

Конфигурация JSF org.springframework.web.jsf.DelegatingVariableResolver en es messages /userForm.jsp cancel /userList.jsp success /userList.jsp

Конфигурация JSF userForm org.appfuse.web.UserForm request id #{param.id} userManager #{userManager}

JSP представление JSF

JSP представление JSF

JSP представление JSF

Улучшения в следующей версии JSF (1.2) Унифицированный EL – лучшая поддержка JSTL Фокусировка на лёгком использовании Расширенная поддержка AJAX Дополнительные реализации: ADF Faces, Facelets

Сравнение. Критерии Сортируемые/Листаемые списки – насколько просто создать список данных с листаемыми страницами и возможностями сортировки. Возможность создания закладок – может ли пользователь создавать закладки на страницы для последующего обращения к ним? Валидация - проверка введённых значений. Тестируемость – возможности для автономного тестирования классов, составляющих клиента, вне контейнера.

Сравнение. Критерии Интернационализация Модификация «на лету» - принятие исправлений без необходимости перекомпиляции или перезапуска контейнера Поддержка разработчиками Производительность/Масштабируемость «Компонетность» - возможность создания повторно- используемых, параметризуемых модулей Возможности языка выражений

Сортируемые/Листаемые списки JSP – никакой поддержки Spring & Struts могут использовать библиотеки тэгов, типа DisplayTag Tapestry имеет contrib:Table компонент JSF имеет h:dataTable компонент без возможностей сортировки – необходимо писать свою собственную логику для реализации данного функционала

Возможность создания закладок JSP, String & Strut имеют полный контроль над строкой запроса Tapestry имеет слегка корявую поддержку создания закладок, но всё же все возможности реализованы JSF делает POST для всего – закладки даже не рассматриваются (но при желании и это можно обойти)

Валидация JSP – «собственные» решения, либо перенос проверки в модель данных String & Struts используют проект Apache – Commons Validator – надёжное и зрелое решение Tapestry – хорошая архитектура валидации – хорошие сообщения (даже без необходимости корректировки под свои нужды) JSF – «некрасивые» сообщения об ошибках по-умолчанию (но легко исправляется)

Тестируемость Struts – необходимо использование StrutsTestCase JSP, Spring – легко тестируется с использованием средств генерации «заглушек» (mock) (EasyMock, jMock, Spring Mock…) Tapestry – неочевидное тестирование, т.к. классы абстрактные – класс Creator помогает JSF – самое простая архитектура для тестирования – классы – просто бины

Интернационализация JSTL позволяет делать это легко почти в любой реализации JSP, Struts, Spring, JSF – используют один ResourceBundle на язык Tapestry – предпочитает отдельные файлы для страниц/компонентов JSF требует, что данные с локализацией были объявлены на каждой странице

Модификация «на лету» JSP – самый гибкий в данном случае (конечно при корректном использовании). JSP файлы перекомпиливаются при каждом изменении, а вот классы нет. Tapestry, Spring & Struts – всё (страницы, компоненты, библиотеки и конфигурационные файлы) (кроме классов) перечитывается при изменении. JSF – не перечитываются конфигурационные файлы.

Поддержка разработчиками JSP & JSF – стандарт, большое сообщество разработчиков и множество документации Spring – большое количество примеров и документации, хорошая поддержка разработчиками библиотеки Tapestry – мало хорошей, понятной документации. Мало примеров. Struts – отсутствие поддержки со стороны разработчиков, но при этом много документации и примеров использования в больших проектах

Производительность / Масштабируемость JSP – хорошие показатели, в связи с отсутствием каких- либо промежуточных уровней Tapestry – после версии 4.0 (где было удалено широкое использование интроспекции) скорость стала сравнима с JSP JSF – не самые лучшие показатели… Spring & Struts – адекватные показатели.

«Компонетность» JSP – тэг-файлы и тэги. Tapestry – очень ориентированная на создание и использование компонетов, хорошая интеграция с JavaScript. JSF – хорошие возможности по созданию компонентов, но создавать не так легко как в Tapestry. Spring & Struts – лишь то же, что даёт JSP.

Возможности языка выражений JSP, JSF, Spring, Struts – богатые возможности EL говорят сами за себя. Tapestry – вместо EL используется OGNL, который предоставляет ещё большие возможности.

Финал Выбирайте с умом…