Апачский гобелен
Оригинальный автор(ы) | Говард Льюис Шип |
---|---|
Разработчик(и) | Фонд программного обеспечения Apache |
Стабильная версия | 5.8.4 [1]
/ 06.02.2024; 5 месяцев назад |
Репозиторий | Хранилище гобеленов |
Написано в | Ява |
Операционная система | Кроссплатформенность ( виртуальная машина Java ) |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | гобелен |
Apache Tapestry — это программа с открытым исходным кодом. компонентно-ориентированная [ нужны разъяснения ] Java Фреймворк веб-приложений концептуально аналогичен JavaServer Faces и Apache Wicket . [2] Гобелен был создан Говардом Льюисом Шипом. [ когда? ] и был принят Apache Software Foundation как проект высшего уровня в 2006 году. [3]
Tapestry подчеркивает простоту, удобство использования и продуктивность разработчиков. Он придерживается парадигмы «Конвенция по конфигурации» , исключая почти всю конфигурацию XML . [4] Tapestry использует модульный подход к веб-разработке, обеспечивая строгую привязку между каждым компонентом пользовательского интерфейса (объектом) на веб-странице и соответствующим ему классом Java . Эта компонентная архитектура заимствует многие идеи из WebObjects . [5]
Примечательные особенности
[ редактировать ]- Перезагрузка живого класса
- Tapestry отслеживает файловую систему на предмет изменений в классах страниц Java, классах компонентов, классах реализации сервисов, шаблонах HTML и файлах свойств компонентов, а также оперативно заменяет изменения в работающем приложении без необходимости перезапуска. Это обеспечивает очень короткий цикл обратной связи «сохранение-просмотр кода», который, как утверждается, значительно повышает производительность разработчиков. [6]
- Компонентный
- Страницы могут быть созданы с помощью небольших вложенных компонентов, каждый из которых имеет шаблон и класс компонента. Создавать пользовательские компоненты тривиально. [7]
- Соглашение важнее конфигурации
- Tapestry использует соглашения об именах и аннотации, а не XML, для настройки приложения. [8]
- Экономное использование HTTPSession
- Благодаря минимальному использованию HTTPSession, Tapestry обеспечивает высокую эффективность в кластерной среде с репликацией сеансов. [9]
- Опубликовать/Перенаправить/Получить
- Большинство отправок форм следуют шаблону Post/Redirect/Get (PRG), который уменьшает количество ошибок при отправке форм и делает URL-адреса более удобными и доступными для закладок, а также позволяет кнопкам браузера «Назад» и «Обновить» работать нормально. [10]
- Инверсия управления (IoC)
- Tapestry построен на легком слое Inversion of Control , похожем на Google Guice , но предназначен для того, чтобы сделать почти все аспекты поведения Tapestry настраиваемыми и заменяемыми. [8]
Привет, мир, пример
[ редактировать ]Минимальному шаблонному приложению Tapestry требуется всего три файла:
- HelloWorld.tml
- Шаблон (X)HTML для страницы /helloworld. Шаблоны Tapestry могут содержать любую корректную (X)HTML-разметку.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<p>Hello, ${username}</p>
</body>
</html>
- HelloWorld.java
- Класс страницы, связанный с шаблоном. Здесь он просто предоставляет свойство *username*, к которому может получить доступ шаблон.
package org.example.demo.pages;
/** A page class (automatically associated with the template file of the same name) */
public class HelloWorld {
/** An ordinary getter */
public String getUsername() {
return "World";
}
}
- веб.xml
- Дескриптор сервлета приложения- развертывания , который устанавливает Tapestry в качестве фильтра сервлетов.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Tapestry Example</display-name>
<context-param>
<!-- Tell Tapestry 5 where to look for pages, components and mixins -->
<param-name>tapestry.app-package</param-name>
<param-value>org.example.demo</param-value>
</context-param>
<filter>
<!-- Define the Tapestry servlet filter -->
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
<!-- Tell the servlet container which requests to send to the Tapestry servlet filter -->
<filter-name>app</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Трансформация класса
[ редактировать ]Tapestry использует манипуляции с байт-кодом для преобразования классов страниц и компонентов во время выполнения. Этот подход позволяет писать классы страниц и компонентов как простые POJO с некоторыми соглашениями об именах и аннотациями, которые потенциально могут вызвать существенное дополнительное поведение во время загрузки класса. В версиях Tapestry 5.0, 5.1 и 5.2 использовалась библиотека манипуляции байт-кодом Javassist. Последующие версии заменили Javassist новым слоем манипулирования байт-кодом под названием Plastic , основанным на ObjectWeb ASM . [11] [12]
Поддержка на стороне клиента
[ редактировать ]Версии Tapestry 5 и выше 5.3 включали в себя JavaScript-фреймворки Prototype и script.aculo.us , а также специальную библиотеку Tapestry, чтобы поддерживать операции Ajax в качестве первоклассных граждан. Доступны сторонние модули для интеграции jQuery вместо или в дополнение к Prototype/Scriptaculous.
Начиная с версии 5.4, Tapestry включает новый уровень JavaScript, который устраняет зависимость встроенных компонентов от Prototype, позволяя подключать jQuery или другую среду JavaScript. [13]
В версии 5.4 также представлена поддержка модулей JavaScript с использованием системы загрузки модулей RequireJS.
Основные принципы
[ редактировать ]В документации проекта Tapestry указаны четыре «принципа», которые определяют все решения по разработке Tapestry, начиная с версии 5 в 2008 году: [14]
- Статическая структура, динамическое поведение — структура страниц и компонентов по существу статична, что устраняет необходимость создания (и хранения в памяти сеанса) больших деревьев страниц и компонентов.
- Адаптивный API — платформа предназначена для адаптации к коду, а не для адаптации кода к платформе.
- Различайте общедоступные и внутренние API — все API явно являются «внутренними» (частными), за исключением тех, которые обязательно являются общедоступными.
- Обеспечьте обратную совместимость. Сообщается, что разработчики Tapestry стремятся сделать так, чтобы обновление до последней версии Tapestry всегда было простым.
Критика
[ редактировать ]Tapestry подвергался критике за отсутствие обратной совместимости между основными версиями, особенно это было отмечено при переходе от версии 4 к версии 5, когда для существующих приложений не было чистого пути миграции. [15] Члены команды проекта признали это серьезной проблемой для пользователей Tapestry в прошлом, и обратная совместимость стала основной целью дизайна Tapestry в будущем. С самого начала разработки версии 5 обратная совместимость была указана как один из четырех новых «основных принципов» Tapestry, а два из трех других были предназначены для того, чтобы сделать возможным развитие платформы без ущерба для обратной совместимости. Члены команды проекта утверждают, что все выпуски Tapestry, начиная с 5.0, обладают высокой обратной совместимостью.
Ранняя критика Tapestry 5 также упоминала документацию как недостаток. Участники проекта теперь утверждают, что этот недостаток в значительной степени устранен с помощью тщательно переработанного и обновленного Руководства пользователя и другой документации.
Начиная с версии 5.0, Tapestry объединяет библиотеки JavaScript Prototype и Scriptaculous. По мнению Говарда Льюиса Шипа, в период 2008-2009 годов это был разумный выбор. Однако с тех пор популярность Prototype снизилась, а популярность jQuery резко возросла. В ответ сообщество Tapestry разработало модули, позволяющие использовать jQuery в дополнение к Prototype или вместо него. Между тем, текущая версия Tapestry, 5.4, полностью устраняет зависимость от Prototype, заменяя ее уровнем совместимости, к которому можно подключить jQuery или Prototype (или, возможно, любую другую среду JavaScript).
Связь с другими фреймворками
[ редактировать ]По словам Говарда Льюиса Шипа, Tapestry изначально задумывался как попытка реализовать на Java некоторые общие концепции и подходы, найденные в WebObjects, который в то время был написан на Objective-C и имел закрытый исходный код. [16]
По словам создателя Wicket Джонатана Локка, Apache Wicket был разработан как ответ на сложность ранних версий Tapestry. [17]
Facelets , технология просмотра по умолчанию в JavaServer Faces , как сообщается, была вдохновлена ранними версиями Tapestry как попытка удовлетворить потребность в «фреймворке, подобном Tapestry, поддерживаемом JavaServer Faces в качестве отраслевого стандарта». [18] [19]
История
[ редактировать ]Версия | Дата | Описание |
---|---|---|
1.0. | 2000 | Разработано Howard Lewis Ship для внутреннего использования. |
2.0. | 2002-04 | Впервые доступен на SourceForge под лицензией GNU Lesser General Public License . [20] |
3.0. | 2004-04 | Первый выпуск под Apache в рамках подпроекта Джакарты. [21] |
4.0. | 2006-01 | Введена поддержка аннотаций JDK 1.5, новая подсистема проверки ввода и улучшены отчеты об ошибках. [22] |
5.0. | 2008-12 | Почти полная переработка Tapestry 4, в которой представлена новая модель компонентов на основе POJO, в которой упор делается на соглашение, а не на конфигурацию, и заменен Hivemind новым слоем инверсии управления без XML. |
5.1. | 2009-04 | Улучшения производительности и памяти, автоматическое сжатие GZIP, агрегация JavaScript, но осталась обратная совместимость с Tapestry 5.0. |
5.2. | 2010-12 | Добавлена проверка компонента JSR 303 . [23] Расширенная перезагрузка живых классов в реализации сервисов. Удален пул страниц. [24] |
5.3. | 2011-11 | Добавлена поддержка типов документов HTML5, аннотаций JSR-330 для внедрения. [25] улучшения производительности и памяти, новые компоненты, переход с JavaAssist на манипуляции с байт-кодом ASM. |
5.3.1 – 5.3.8. | 2012-2014 | Исправлены ошибки и незначительные улучшения |
5.4-5.4.5. | 2015-2019 | Основные улучшения на стороне клиента. Новый уровень JavaScript для переключаемой поддержки jQuery/Prototype использует Require.js в качестве системы модулей JavaScript и Twitter Bootstrap в качестве стиля по умолчанию. [26] |
5.5. | 2020-03 | Текущая стабильная версия. Поддержка байт-кода Java 12, Typescript и Bootstrap 4. |
См. также
[ редактировать ]Ссылки
[ редактировать ]- Дробязко, Игорь (2012), Гобелен 5: Быстрая разработка веб-приложений на Java , Игорь Дробязко, с. 482, заархивировано из оригинала 15 декабря 2014 г. , получено 20 января 2013 г.
- Колесников, Александр (15 января 2008 г.), Tapestry 5: Создание веб-приложений: пошаговое руководство по веб-разработке на Java с помощью удобной для разработчиков инфраструктуры Apache Tapestry , Packt Publishing , стр. 280, ISBN 978-1-84719-307-0
- Иок Тонг, Ка (1 января 2007 г.), Наслаждайтесь веб-разработкой с помощью Tapestry (3-е изд.), стр. 497, АСИН B00262M3HS
- Льюис Шип, Ховард (2004), Гобелен в действии , Мэннинг , с. 580, ISBN 1932394117
Примечания
[ редактировать ]- ^ "Скачать" .
- ^ «Интервью Говарда Льюиса «Корабль гобеленов» [часть 1] (22 октября 2012 г.)» . Архивировано из оригинала 22 января 2013 г. Проверено 28 января 2013 г.
- ^ Дробязко 2012, стр. 1.
- ^ «Tapestry Central: Обновления Tapestry 5» . 24 июля 2006 г.
- ^ Гобелен в действии - Предисловие Говарда Льюиса Шипа
- ^ «Перезагрузка классов — гобелен Apache» .
- ^ Дробязко 2012, с.
- ^ Jump up to: а б Дробязко 2012, с.7.
- ^ «Производительность и кластеризация — гобелен Apache» .
- ^ «Формы и проверка — гобелен Apache» .
- ^ «Знакомство с Plastic I: Введение | Магия Java» . 18 апреля 2011 г.
- ^ «[asm] Plastic: ASM-обертка для Tapestry 5.3» . Архивировано из оригинала 18 июня 2013 г. Проверено 21 февраля 2013 г.
- ^ «Tapestry Central: внимание к Tapestry 5.4» . 19 октября 2012 г.
- ^ «Принципы» . 21 декабря 2010 г. Архивировано из оригинала 12 октября 2012 года . Проверено 12 октября 2012 г.
- ^ «Будущая совместимость Tapestry5 [ так в оригинале ]» . 30 апреля 2009 г. Архивировано из оригинала 21 января 2013 г. Проверено 21 января 2013 г.
- ^ «DevRates | Интервью Говарда Льюиса «Корабль гобеленов» [часть 1]» . Архивировано из оригинала 22 января 2013 г. Проверено 28 января 2013 г.
- ^ «Уикет: Нужна ли нам еще одна структура уровня представления?» . www.theserverside.com . Архивировано из оригинала 9 сентября 2004 года . Проверено 11 января 2022 г.
- ^ «Фейсеты: Фасеты JavaServer» . facelets.dev.java.net . Архивировано из оригинала 6 июля 2007 года . Проверено 11 января 2022 г.
- ^ «JSF Central — Внутренние Facelets, часть 1: Введение» . www.jsfcentral.com . Архивировано из оригинала 13 января 2013 года . Проверено 11 января 2022 г.
- ^ «Гобелен: вышла версия 2.0 веб-компонентов Java» . Проверено 20 января 2013 г.
- ^ «Финальный выпуск Tapestry 3.0» . Проверено 20 января 2013 г.
- ^ «Выпущен Гобелен 4.0» . Проверено 20 января 2013 г.
- ^ «Tapestry и API проверки компонентов JSR-303» . 04.01.2010. Архивировано из оригинала 16 апреля 2010 года . Проверено 13 марта 2010 г.
- ^ «Анонс Гобелена 5.2» . 17 декабря 2010 г. Архивировано из оригинала 14 ноября 2012 года . Проверено 14 ноября 2012 г.
- ^ «Использование стандартных аннотаций JSR 330 — Apache Tapestry» .
- ^ «Переписывание JavaScript» . Архивировано из оригинала 14 ноября 2012 г. Проверено 20 января 2013 г.