Средства разработки web приложений(Web frameworks) презентация

Содержание

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

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


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


Слайд 3Введение
Данная презентация познакомит Вас с существующими библиотеками разработки веб-приложений на языке

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

Слайд 4Основа архитектуры «тонких» клиентов
В качестве основы для всех клиентов, связанных с

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

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


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


Слайд 7JSP (Жизненный цикл)


Слайд 8Struts (Краткая характеристика)
Положительные стороны:
Много проектов реализованных с помощью данной библиотеки, подтверждает

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


Слайд 9Spring (Краткая характеристика)
Положительные стороны:
Переопределение правил связки данных на форме и в

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

Слайд 10Spring (Жизненный цикл GET)


Слайд 11Spring (Жизненный цикл POST)


Слайд 12«Контроллер» 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());
}
}

Слайд 13«Контроллер» 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());
}
}

Слайд 14Конфигурирование Spring





Слайд 15Конфигурирование Spring






name="suffix" value=".jsp"/>


Слайд 16Конфигурирование Spring






name="suffix" value=".jsp"/>

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">


/users.html=userController




Слайд 17JSP представление Spring






key="user.firstName"/>:













Слайд 18JSP представление Spring






key="user.firstName"/>:













Слайд 19Velocity представление Spring

#springFormHiddenInput("user.id" '')


#springMessage("user.firstName"):

#springFormInput("user.firstName" 'id="firstName"')
#springShowErrors("
" "fieldError")



#springMessage("user.lastName"):

#springFormInput("user.lastName" 'id="lastName"')
#springShowErrors("
"

"fieldError")



Слайд 20Spring Web Flow
Инфраструктура позволяющая определять последовательность переходов между страницами
Определяется программно или

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

Слайд 21Spring Web Flow






on="submit" to="display.addressForm">














Слайд 22Tapestry (Краткая характеристика)
Положительные стороны:
Очень эффективна после изучения
Шаблоны являются HTML, что очень

хорошо для дизайнеров
Хорошее сообщество пользователей
Отрицательные стороны:
Документация достаточно сложна для восприятия
Крутая кривая обучения
Мало примеров
Долгие циклы релизов – ведущие релизы 1-2 раза в год



Слайд 23Tapestry (Жизненный цикл)


Слайд 24Класс 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);
}

Слайд 25Конфигурирование Tapestry








Слайд 26Конфигурирование Tapestry

name="user"/>








Слайд 27HTML представление Tapestry





key="firstName">First Name:





:





:






Слайд 28HTML представление Tapestry





key="firstName">First Name:





:





:






Слайд 29HTML представление Tapestry





key="firstName">First Name:





:





:






Слайд 30Улучшения в следующей версии Tapestry
Богатая поддержка аннотаций
Высокий уровень конфигурирования – базирование

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

Слайд 31JSF (Краткая характеристика)
Положительные стороны:
J2EE Стандарт
Быстрая и простая разработка
Богата библиотека навигации (аналог

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



Слайд 32JSF (Жизненный цикл)


Слайд 33Бин страницы 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";
}


Слайд 34Конфигурация JSF


org.springframework.web.jsf.DelegatingVariableResolver


en
en
es

messages


/userForm.jsp

cancel
/userList.jsp


success
/userList.jsp




Слайд 35Конфигурация JSF


org.springframework.web.jsf.DelegatingVariableResolver


en
en
es

messages


/userForm.jsp

cancel
/userList.jsp


success
/userList.jsp




Слайд 36Конфигурация JSF

userForm
org.appfuse.web.UserForm
request

id
#{param.id}


userManager
#{userManager}



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







for="firstName" value="#{messages['user.firstName']}"/>






weekRowClass="weekHeader" id="birthday"
currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}"
renderAsPopup="true" addResources="false"/>


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







for="firstName" value="#{messages['user.firstName']}"/>






weekRowClass="weekHeader" id="birthday"
currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}"
renderAsPopup="true" addResources="false"/>


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







for="firstName" value="#{messages['user.firstName']}"/>






weekRowClass="weekHeader" id="birthday"
currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}"
renderAsPopup="true" addResources="false"/>


Слайд 40Улучшения в следующей версии JSF (1.2)
Унифицированный EL – лучшая поддержка JSTL
Фокусировка

на лёгком использовании
Расширенная поддержка AJAX
Дополнительные реализации: ADF Faces, Facelets

Слайд 41Сравнение. Критерии
Сортируемые/Листаемые списки – насколько просто создать список данных с листаемыми

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

Слайд 42Сравнение. Критерии
Интернационализация
Модификация «на лету» - принятие исправлений без необходимости перекомпиляции или

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

Слайд 43Сортируемые/Листаемые списки
JSP – никакой поддержки
Spring & Struts могут использовать библиотеки тэгов,

типа “DisplayTag”
Tapestry имеет contrib:Table компонент
JSF имеет h:dataTable компонент без возможностей сортировки – необходимо писать свою собственную логику для реализации данного функционала


Слайд 44Возможность создания закладок
JSP, String & Strut имеют полный контроль над строкой

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

Слайд 45Валидация
JSP – «собственные» решения, либо перенос проверки в модель данных
String &

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

Слайд 46Тестируемость
Struts – необходимо использование StrutsTestCase
JSP, Spring – легко тестируется с использованием

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

Слайд 47Интернационализация
JSTL позволяет делать это легко почти в любой реализации
JSP, Struts,

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

Слайд 48Модификация «на лету»
JSP – самый гибкий в данном случае (конечно при

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

Слайд 49Поддержка разработчиками
JSP & JSF – стандарт, большое сообщество разработчиков и множество

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

Слайд 50Производительность / Масштабируемость
JSP – хорошие показатели, в связи с отсутствием каких-либо

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

Слайд 51«Компонетность»
JSP – тэг-файлы и тэги.
Tapestry – очень ориентированная на создание и

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


Слайд 52Возможности языка выражений
JSP, JSF, Spring, Struts – богатые возможности EL говорят

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

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


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика