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

Категория: Технологии
Нажмите для полного просмотра!
Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №1Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №2Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №3Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №4Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №5Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №6Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №7Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №8Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №9Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №10Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №11Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №12Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №13Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №14Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №15Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №16Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №17Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №18Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №19Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №20Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №21Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №22Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №23Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №24Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №25Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №26Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №27Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №28Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №29Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №30Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №31Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №32Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №33Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №34Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №35Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №36Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №37Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №38Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №39Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №40Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №41Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №42Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №43Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №44Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №45Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №46Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №47Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №48Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №49Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №50Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №51Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №52Средства разработки web приложений (Web frameworks)  Малышкин Фёдор  2 ноября 2007, слайд №53

Содержание

Вы можете ознакомиться и скачать Средства разработки web приложений (Web frameworks) Малышкин Фёдор 2 ноября 2007. Презентация содержит 53 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





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

Слайд 2





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

Слайд 3





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

Слайд 4





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

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

Слайд 5





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

Слайд 6





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

Слайд 7





JSP (Жизненный цикл)
Описание слайда:
JSP (Жизненный цикл)

Слайд 8





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

Слайд 9





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

Слайд 10





Spring (Жизненный цикл GET)
Описание слайда:
Spring (Жизненный цикл GET)

Слайд 11





Spring (Жизненный цикл POST)
Описание слайда:
Spring (Жизненный цикл 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());
	}
}
Описание слайда:
«Контроллер» 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());
	}
}
Описание слайда:
«Контроллер» 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
<bean id="userController" class="org.appfuse.web.UserController">
<property name="userManager" ref="userManager"/>
</bean>
Описание слайда:
Конфигурирование Spring <bean id="userController" class="org.appfuse.web.UserController"> <property name="userManager" ref="userManager"/> </bean>

Слайд 15





Конфигурирование Spring
<bean id="userController" class="org.appfuse.web.UserController">
<property name="userManager" ref="userManager"/>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
Описание слайда:
Конфигурирование Spring <bean id="userController" class="org.appfuse.web.UserController"> <property name="userManager" ref="userManager"/> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean>

Слайд 16





Конфигурирование Spring
<bean id="userController" class="org.appfuse.web.UserController">
<property name="userManager" ref="userManager"/>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/users.html=userController
</value>
</property>
</bean>
Описание слайда:
Конфигурирование Spring <bean id="userController" class="org.appfuse.web.UserController"> <property name="userManager" ref="userManager"/> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /users.html=userController </value> </property> </bean>

Слайд 17





JSP представление Spring
<form:form commandName="user" method="post">
<form:errors path="*" cssClass="error"/>
<form:hidden path="id" />
<table class="detail">
<tr>
	<th><label for="firstName">
		<fmt:message key="user.firstName"/>:</label></th>
	<td>
		<form:input path="firstName" id="firstName"/>
		<form:errors path="firstName" cssClass="fieldError"/>
	</td>
</tr>
<tr>
	<th><label for="lastName" class="required">
		* <fmt:message key="user.lastName"/>:</label></th>
	<td>
		<form:input path="lastName" id="firstName"/>
		<form:errors path="lastName" cssClass="fieldError"/>
	</td>
</tr>
Описание слайда:
JSP представление Spring <form:form commandName="user" method="post"> <form:errors path="*" cssClass="error"/> <form:hidden path="id" /> <table class="detail"> <tr> <th><label for="firstName"> <fmt:message key="user.firstName"/>:</label></th> <td> <form:input path="firstName" id="firstName"/> <form:errors path="firstName" cssClass="fieldError"/> </td> </tr> <tr> <th><label for="lastName" class="required"> * <fmt:message key="user.lastName"/>:</label></th> <td> <form:input path="lastName" id="firstName"/> <form:errors path="lastName" cssClass="fieldError"/> </td> </tr>

Слайд 18





JSP представление Spring
<form:form commandName="user" method="post">
<form:errors path="*" cssClass="error"/>
<form:hidden path="id" />
<table class="detail">
<tr>
	<th><label for="firstName">
		<fmt:message key="user.firstName"/>:</label></th>
	<td>
		<form:input path="firstName" id="firstName"/>
		<form:errors path="firstName" cssClass="fieldError"/>
	</td>
</tr>
<tr>
	<th><label for="lastName" class="required">
		* <fmt:message key="user.lastName"/>:</label></th>
	<td>
		<form:input path="lastName" id="firstName"/>
		<form:errors path="lastName" cssClass="fieldError"/>
	</td>
</tr>
Описание слайда:
JSP представление Spring <form:form commandName="user" method="post"> <form:errors path="*" cssClass="error"/> <form:hidden path="id" /> <table class="detail"> <tr> <th><label for="firstName"> <fmt:message key="user.firstName"/>:</label></th> <td> <form:input path="firstName" id="firstName"/> <form:errors path="firstName" cssClass="fieldError"/> </td> </tr> <tr> <th><label for="lastName" class="required"> * <fmt:message key="user.lastName"/>:</label></th> <td> <form:input path="lastName" id="firstName"/> <form:errors path="lastName" cssClass="fieldError"/> </td> </tr>

Слайд 19





Velocity представление Spring
<form method="post" action="#springUrl('/editUser.html')">
#springFormHiddenInput("user.id" '')
<table>
<tr>
	<th><label for="firstName">#springMessage("user.firstName"):</label></th>
	<td>
		#springFormInput("user.firstName" 'id="firstName"')
		#springShowErrors("<br/>" "fieldError")
	</td>
</tr>
<tr>
	<th><label for="lastName">#springMessage("user.lastName"):</label></th>
	<td>
		#springFormInput("user.lastName" 'id="lastName"')
		#springShowErrors("<br/>" "fieldError")
	</td>
</tr>
Описание слайда:
Velocity представление Spring <form method="post" action="#springUrl('/editUser.html')"> #springFormHiddenInput("user.id" '') <table> <tr> <th><label for="firstName">#springMessage("user.firstName"):</label></th> <td> #springFormInput("user.firstName" 'id="firstName"') #springShowErrors("<br/>" "fieldError") </td> </tr> <tr> <th><label for="lastName">#springMessage("user.lastName"):</label></th> <td> #springFormInput("user.lastName" 'id="lastName"') #springShowErrors("<br/>" "fieldError") </td> </tr>

Слайд 20





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

Слайд 21





Spring Web Flow
<webflow id="userFlow" start-state="setupForm">
	<action-state id="setupForm">
		<action bean="userFormAction"/>
		<transition on="success" to="display.nameForm"/>
	</action-state>
<view-state id="display.nameForm" view="flow/name">
	<transition on="submit" to="display.addressForm">
		<action bean="userFormAction" method="bindAndValidate"/>
	</transition>
	<transition on="cancel" to="finish"/>
</view-state>
<view-state id="display.addressForm" view="flow/address">
	<transition on="previous" to="display.nameForm">
		<action bean="userFormAction" method="bindAndValidate"/>
	</transition>
	<transition on="submit" to="display.otherForm">
		<action bean="userFormAction" method="bindAndValidate"/>
	</transition>
	<transition on="cancel" to="finish"/>
</view-state>
Описание слайда:
Spring Web Flow <webflow id="userFlow" start-state="setupForm"> <action-state id="setupForm"> <action bean="userFormAction"/> <transition on="success" to="display.nameForm"/> </action-state> <view-state id="display.nameForm" view="flow/name"> <transition on="submit" to="display.addressForm"> <action bean="userFormAction" method="bindAndValidate"/> </transition> <transition on="cancel" to="finish"/> </view-state> <view-state id="display.addressForm" view="flow/address"> <transition on="previous" to="display.nameForm"> <action bean="userFormAction" method="bindAndValidate"/> </transition> <transition on="submit" to="display.otherForm"> <action bean="userFormAction" method="bindAndValidate"/> </transition> <transition on="cancel" to="finish"/> </view-state>

Слайд 22





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

Слайд 23





Tapestry (Жизненный цикл)
Описание слайда:
Tapestry (Жизненный цикл)

Слайд 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);
	}
Описание слайда:
Класс 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
<application name="tapestry">
	<page name="Home" specification-path="/pages/home.page"/>
	<page name="users" specification-path="/pages/users.page"/>
	<page name="userForm" specification-path="/pages/userForm.page"/>
	<library id=“contrib” specificationpath="/org/apache/tapestry/contrib/Contrib.library"/>
</application>
Описание слайда:
Конфигурирование Tapestry <application name="tapestry"> <page name="Home" specification-path="/pages/home.page"/> <page name="users" specification-path="/pages/users.page"/> <page name="userForm" specification-path="/pages/userForm.page"/> <library id=“contrib” specificationpath="/org/apache/tapestry/contrib/Contrib.library"/> </application>

Слайд 26





Конфигурирование Tapestry
<page-specification class="org.appfuse.web.UserForm">
	<bean name="delegate“ class="org.apache.tapestry.valid.ValidationDelegate"/>
	<component id="form" type="Form">
		<binding name="delegate" value="ognl:beans.delegate"/>
		<binding name="clientValidationEnabled" value="true"/>
	</component>
	<property name="user"/>
	<inject property="userManager" object="spring:userManager"/>
	<component id="lastNameField" type="TextField">
		<binding name="value" value="user.lastName"/>
		<binding name="validators" value="validators:required"/>
		<binding name="displayName" value="message:lastName"/>
	</component>
</page-specification>
Описание слайда:
Конфигурирование Tapestry <page-specification class="org.appfuse.web.UserForm"> <bean name="delegate“ class="org.apache.tapestry.valid.ValidationDelegate"/> <component id="form" type="Form"> <binding name="delegate" value="ognl:beans.delegate"/> <binding name="clientValidationEnabled" value="true"/> </component> <property name="user"/> <inject property="userManager" object="spring:userManager"/> <component id="lastNameField" type="TextField"> <binding name="value" value="user.lastName"/> <binding name="validators" value="validators:required"/> <binding name="displayName" value="message:lastName"/> </component> </page-specification>

Слайд 27





HTML представление Tapestry
<form jwcid="@Form" delegate="ognl:beans.delegate" name="userForm">
<input type="hidden" jwcid="@Hidden" value="ognl:user.id"/>
<table class="detail">
<tr>
	<th>
		<label for="firstName"><span key="firstName">First Name</span></label>:
	</th>
	<td><input jwcid="@TextField" type="text" value="ognl:user.firstName" id="firstName"/></td>
</tr>
<tr>
	<th>
	<label jwcid="@FieldLabel" field="ognl:components.lastNameField">Last Name</label>:
	</th>
	<td><input jwcid="lastNameField" type="text" id="lastName"/></td>
</tr>
<tr>
	<th>
		<label for="birthday"><span key="birthday">Birthday</span></label>:
	</th>
	<td>
		<input jwcid="@DatePicker" format="message:date.format" type="text”
		size="11" value="ognl:user.birthday" id="birthday"/>
	</td>
</tr>
Описание слайда:
HTML представление Tapestry <form jwcid="@Form" delegate="ognl:beans.delegate" name="userForm"> <input type="hidden" jwcid="@Hidden" value="ognl:user.id"/> <table class="detail"> <tr> <th> <label for="firstName"><span key="firstName">First Name</span></label>: </th> <td><input jwcid="@TextField" type="text" value="ognl:user.firstName" id="firstName"/></td> </tr> <tr> <th> <label jwcid="@FieldLabel" field="ognl:components.lastNameField">Last Name</label>: </th> <td><input jwcid="lastNameField" type="text" id="lastName"/></td> </tr> <tr> <th> <label for="birthday"><span key="birthday">Birthday</span></label>: </th> <td> <input jwcid="@DatePicker" format="message:date.format" type="text” size="11" value="ognl:user.birthday" id="birthday"/> </td> </tr>

Слайд 28





HTML представление Tapestry
<form jwcid="@Form" delegate="ognl:beans.delegate" name="userForm">
<input type="hidden" jwcid="@Hidden" value="ognl:user.id"/>
<table class="detail">
<tr>
	<th>
		<label for="firstName"><span key="firstName">First Name</span></label>:
	</th>
	<td><input jwcid="@TextField" type="text" value="ognl:user.firstName" id="firstName"/></td>
</tr>
<tr>
	<th>
	<label jwcid="@FieldLabel" field="ognl:components.lastNameField">Last Name</label>:
	</th>
	<td><input jwcid="lastNameField" type="text" id="lastName"/></td>
</tr>
<tr>
	<th>
		<label for="birthday"><span key="birthday">Birthday</span></label>:
	</th>
	<td>
		<input jwcid="@DatePicker" format="message:date.format" type="text”
		size="11" value="ognl:user.birthday" id="birthday"/>
	</td>
</tr>
Описание слайда:
HTML представление Tapestry <form jwcid="@Form" delegate="ognl:beans.delegate" name="userForm"> <input type="hidden" jwcid="@Hidden" value="ognl:user.id"/> <table class="detail"> <tr> <th> <label for="firstName"><span key="firstName">First Name</span></label>: </th> <td><input jwcid="@TextField" type="text" value="ognl:user.firstName" id="firstName"/></td> </tr> <tr> <th> <label jwcid="@FieldLabel" field="ognl:components.lastNameField">Last Name</label>: </th> <td><input jwcid="lastNameField" type="text" id="lastName"/></td> </tr> <tr> <th> <label for="birthday"><span key="birthday">Birthday</span></label>: </th> <td> <input jwcid="@DatePicker" format="message:date.format" type="text” size="11" value="ognl:user.birthday" id="birthday"/> </td> </tr>

Слайд 29





HTML представление Tapestry
<form jwcid="@Form" delegate="ognl:beans.delegate" name="userForm">
<input type="hidden" jwcid="@Hidden" value="ognl:user.id"/>
<table class="detail">
<tr>
	<th>
		<label for="firstName"><span key="firstName">First Name</span></label>:
	</th>
	<td><input jwcid="@TextField" type="text" value="ognl:user.firstName" id="firstName"/></td>
</tr>
<tr>
	<th>
	<label jwcid="@FieldLabel" field="ognl:components.lastNameField">Last Name</label>:
	</th>
	<td><input jwcid="lastNameField" type="text" id="lastName"/></td>
</tr>
<tr>
	<th>
		<label for="birthday"><span key="birthday">Birthday</span></label>:
	</th>
	<td>
		<input jwcid="@DatePicker" format="message:date.format" type="text”
		size="11" value="ognl:user.birthday" id="birthday"/>
	</td>
</tr>
Описание слайда:
HTML представление Tapestry <form jwcid="@Form" delegate="ognl:beans.delegate" name="userForm"> <input type="hidden" jwcid="@Hidden" value="ognl:user.id"/> <table class="detail"> <tr> <th> <label for="firstName"><span key="firstName">First Name</span></label>: </th> <td><input jwcid="@TextField" type="text" value="ognl:user.firstName" id="firstName"/></td> </tr> <tr> <th> <label jwcid="@FieldLabel" field="ognl:components.lastNameField">Last Name</label>: </th> <td><input jwcid="lastNameField" type="text" id="lastName"/></td> </tr> <tr> <th> <label for="birthday"><span key="birthday">Birthday</span></label>: </th> <td> <input jwcid="@DatePicker" format="message:date.format" type="text” size="11" value="ognl:user.birthday" id="birthday"/> </td> </tr>

Слайд 30





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

Слайд 31





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

Слайд 32





JSF (Жизненный цикл)
Описание слайда:
JSF (Жизненный цикл)

Слайд 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";
}
Описание слайда:
Бин страницы 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 
<application>
	<variable-resolver>
		org.springframework.web.jsf.DelegatingVariableResolver
	</variable-resolver>
	<locale-config>
		<default-locale>en</default-locale>
		<supported-locale>en</supported-locale>
		<supported-locale>es</supported-locale>
	</locale-config>
	<message-bundle>messages</message-bundle>
</application>
<navigation-rule>
	<from-view-id>/userForm.jsp</from-view-id>
	<navigation-case>
		<from-outcome>cancel</from-outcome>
		<to-view-id>/userList.jsp</to-view-id>
	</navigation-case>
	<navigation-case>
		<from-outcome>success</from-outcome>
		<to-view-id>/userList.jsp</to-view-id>
		<redirect/>
	</navigation-case>
</navigation-rule>
Описание слайда:
Конфигурация JSF <application> <variable-resolver> org.springframework.web.jsf.DelegatingVariableResolver </variable-resolver> <locale-config> <default-locale>en</default-locale> <supported-locale>en</supported-locale> <supported-locale>es</supported-locale> </locale-config> <message-bundle>messages</message-bundle> </application> <navigation-rule> <from-view-id>/userForm.jsp</from-view-id> <navigation-case> <from-outcome>cancel</from-outcome> <to-view-id>/userList.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/userList.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule>

Слайд 35





Конфигурация JSF 
<application>
	<variable-resolver>
		org.springframework.web.jsf.DelegatingVariableResolver
	</variable-resolver>
	<locale-config>
		<default-locale>en</default-locale>
		<supported-locale>en</supported-locale>
		<supported-locale>es</supported-locale>
	</locale-config>
	<message-bundle>messages</message-bundle>
</application>
<navigation-rule>
	<from-view-id>/userForm.jsp</from-view-id>
	<navigation-case>
		<from-outcome>cancel</from-outcome>
		<to-view-id>/userList.jsp</to-view-id>
	</navigation-case>
	<navigation-case>
		<from-outcome>success</from-outcome>
		<to-view-id>/userList.jsp</to-view-id>
		<redirect/>
	</navigation-case>
</navigation-rule>
Описание слайда:
Конфигурация JSF <application> <variable-resolver> org.springframework.web.jsf.DelegatingVariableResolver </variable-resolver> <locale-config> <default-locale>en</default-locale> <supported-locale>en</supported-locale> <supported-locale>es</supported-locale> </locale-config> <message-bundle>messages</message-bundle> </application> <navigation-rule> <from-view-id>/userForm.jsp</from-view-id> <navigation-case> <from-outcome>cancel</from-outcome> <to-view-id>/userList.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/userList.jsp</to-view-id> <redirect/> </navigation-case> </navigation-rule>

Слайд 36





Конфигурация JSF 
<managed-bean>
	<managed-bean-name>userForm</managed-bean-name>
	<managed-bean-class>org.appfuse.web.UserForm</managed-bean-class>
	<managed-bean-scope>request</managed-bean-scope>
	<managed-property>
		<property-name>id</property-name>
		<value>#{param.id}</value>
	</managed-property>
	<managed-property>
		<property-name>userManager</property-name>
		<value>#{userManager}</value>
	</managed-property>
</managed-bean>
Описание слайда:
Конфигурация JSF <managed-bean> <managed-bean-name>userForm</managed-bean-name> <managed-bean-class>org.appfuse.web.UserForm</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>id</property-name> <value>#{param.id}</value> </managed-property> <managed-property> <property-name>userManager</property-name> <value>#{userManager}</value> </managed-property> </managed-bean>

Слайд 37





JSP представление JSF 
<f:view>
<f:loadBundle var="messages" basename="messages"/>
<h:form id="userForm">
<h:inputHidden value="#{userForm.user.id}">
	<f:convertNumber/>
</h:inputHidden>
<h:panelGrid columns="3" styleClass="detail" columnClasses="label">
	<h:outputLabel for="firstName" value="#{messages['user.firstName']}"/>
	<h:inputText value="#{userForm.user.firstName}" id="firstName"/>
	<h:message for="firstName" styleClass="errorMessage"/>
	<h:outputLabel for="lastName" value="#{messages['user.lastName']}"/>
	<h:inputText value="#{userForm.user.lastName}" id="lastName" required="true"/>
	<h:message for="lastName" styleClass="errorMessage"/>
	<h:outputLabel for="birthday" value="#{messages['user.birthday']}"/>
	<t:inputCalendar monthYearRowClass="yearMonthHeader"
		weekRowClass="weekHeader" id="birthday"
		currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}"
		renderAsPopup="true" addResources="false"/>
	<h:message for="birthday" styleClass="errorMessage"/>
Описание слайда:
JSP представление JSF <f:view> <f:loadBundle var="messages" basename="messages"/> <h:form id="userForm"> <h:inputHidden value="#{userForm.user.id}"> <f:convertNumber/> </h:inputHidden> <h:panelGrid columns="3" styleClass="detail" columnClasses="label"> <h:outputLabel for="firstName" value="#{messages['user.firstName']}"/> <h:inputText value="#{userForm.user.firstName}" id="firstName"/> <h:message for="firstName" styleClass="errorMessage"/> <h:outputLabel for="lastName" value="#{messages['user.lastName']}"/> <h:inputText value="#{userForm.user.lastName}" id="lastName" required="true"/> <h:message for="lastName" styleClass="errorMessage"/> <h:outputLabel for="birthday" value="#{messages['user.birthday']}"/> <t:inputCalendar monthYearRowClass="yearMonthHeader" weekRowClass="weekHeader" id="birthday" currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}" renderAsPopup="true" addResources="false"/> <h:message for="birthday" styleClass="errorMessage"/>

Слайд 38





JSP представление JSF 
<f:view>
<f:loadBundle var="messages" basename="messages"/>
<h:form id="userForm">
<h:inputHidden value="#{userForm.user.id}">
	<f:convertNumber/>
</h:inputHidden>
<h:panelGrid columns="3" styleClass="detail" columnClasses="label">
	<h:outputLabel for="firstName" value="#{messages['user.firstName']}"/>
	<h:inputText value="#{userForm.user.firstName}" id="firstName"/>
	<h:message for="firstName" styleClass="errorMessage"/>
	<h:outputLabel for="lastName" value="#{messages['user.lastName']}"/>
	<h:inputText value="#{userForm.user.lastName}" id="lastName" required="true"/>
	<h:message for="lastName" styleClass="errorMessage"/>
	<h:outputLabel for="birthday" value="#{messages['user.birthday']}"/>
	<t:inputCalendar monthYearRowClass="yearMonthHeader"
		weekRowClass="weekHeader" id="birthday"
		currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}"
		renderAsPopup="true" addResources="false"/>
	<h:message for="birthday" styleClass="errorMessage"/>
Описание слайда:
JSP представление JSF <f:view> <f:loadBundle var="messages" basename="messages"/> <h:form id="userForm"> <h:inputHidden value="#{userForm.user.id}"> <f:convertNumber/> </h:inputHidden> <h:panelGrid columns="3" styleClass="detail" columnClasses="label"> <h:outputLabel for="firstName" value="#{messages['user.firstName']}"/> <h:inputText value="#{userForm.user.firstName}" id="firstName"/> <h:message for="firstName" styleClass="errorMessage"/> <h:outputLabel for="lastName" value="#{messages['user.lastName']}"/> <h:inputText value="#{userForm.user.lastName}" id="lastName" required="true"/> <h:message for="lastName" styleClass="errorMessage"/> <h:outputLabel for="birthday" value="#{messages['user.birthday']}"/> <t:inputCalendar monthYearRowClass="yearMonthHeader" weekRowClass="weekHeader" id="birthday" currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}" renderAsPopup="true" addResources="false"/> <h:message for="birthday" styleClass="errorMessage"/>

Слайд 39





JSP представление JSF 
<f:view>
<f:loadBundle var="messages" basename="messages"/>
<h:form id="userForm">
<h:inputHidden value="#{userForm.user.id}">
	<f:convertNumber/>
</h:inputHidden>
<h:panelGrid columns="3" styleClass="detail" columnClasses="label">
	<h:outputLabel for="firstName" value="#{messages['user.firstName']}"/>
	<h:inputText value="#{userForm.user.firstName}" id="firstName"/>
	<h:message for="firstName" styleClass="errorMessage"/>
	<h:outputLabel for="lastName" value="#{messages['user.lastName']}"/>
	<h:inputText value="#{userForm.user.lastName}" id="lastName" required="true"/>
	<h:message for="lastName" styleClass="errorMessage"/>
	<h:outputLabel for="birthday" value="#{messages['user.birthday']}"/>
	<t:inputCalendar monthYearRowClass="yearMonthHeader"
		weekRowClass="weekHeader" id="birthday"
		currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}"
		renderAsPopup="true" addResources="false"/>
	<h:message for="birthday" styleClass="errorMessage"/>
Описание слайда:
JSP представление JSF <f:view> <f:loadBundle var="messages" basename="messages"/> <h:form id="userForm"> <h:inputHidden value="#{userForm.user.id}"> <f:convertNumber/> </h:inputHidden> <h:panelGrid columns="3" styleClass="detail" columnClasses="label"> <h:outputLabel for="firstName" value="#{messages['user.firstName']}"/> <h:inputText value="#{userForm.user.firstName}" id="firstName"/> <h:message for="firstName" styleClass="errorMessage"/> <h:outputLabel for="lastName" value="#{messages['user.lastName']}"/> <h:inputText value="#{userForm.user.lastName}" id="lastName" required="true"/> <h:message for="lastName" styleClass="errorMessage"/> <h:outputLabel for="birthday" value="#{messages['user.birthday']}"/> <t:inputCalendar monthYearRowClass="yearMonthHeader" weekRowClass="weekHeader" id="birthday" currentDayCellClass="currentDayCell" value="#{userForm.user.birthday}" renderAsPopup="true" addResources="false"/> <h:message for="birthday" styleClass="errorMessage"/>

Слайд 40





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

Слайд 41





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

Слайд 42





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

Слайд 43





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

Слайд 44





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

Слайд 45





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

Слайд 46





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

Слайд 47





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

Слайд 48





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

Слайд 49





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

Слайд 50





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

Слайд 51





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

Слайд 52





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

Слайд 53





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



Похожие презентации
Mypresentation.ru
Загрузить презентацию