Гобелен Apache - Apache Tapestry

Гобелен Apache
Логотип Apache Tapestry
Оригинальный автор (ы)Корабль Говарда Льюиса
Разработчики)Фонд программного обеспечения Apache
Стабильный выпуск
5.6.1 / 19 июля 2020 г.; 4 месяца назад (2020-07-19)[1]
РепозиторийХранилище гобеленов
Написано вЯва
Операционная системаКроссплатформенность (Виртуальная машина Java )
ТипФреймворк веб-приложений
ЛицензияЛицензия Apache 2.0
Интернет сайтгобелен.apache.org

Гобелен Apache является Открытый исходный код компонентно-ориентированный Ява каркас веб-приложений концептуально похож на JavaServer Faces и Apache Wicket.[2] Гобелен был создан Говардом Льюисом Шипом,[когда? ] и был принят Фонд программного обеспечения Apache как проект высшего уровня в 2006 году.[3]

Tapestry подчеркивает простоту, удобство использования и продуктивность разработчика. Он придерживается Соглашение важнее конфигурации парадигма, устраняющая почти всю конфигурацию XML.[4] Tapestry использует модульный подход к веб-разработке, имея сильную привязка между каждым пользовательский интерфейс компонент (объект) на веб-странице и соответствующий ему Ява учебный класс. Эта компонентная архитектура заимствует многие идеи из WebObjects.[5]

Примечательные особенности

Перезагрузка живого класса
Tapestry контролирует файловую систему на предмет изменений в классах страниц Java, классах компонентов, классах реализации сервисов, HTML-шаблонах и файлах свойств компонентов и выполняет горячую замену изменений в работающем приложении без перезапуска. Это обеспечивает очень короткий цикл обратной связи «код-сохранение-просмотр», который, как утверждается, значительно повышает производительность труда разработчиков.[6]
На основе компонентов
Страницы могут быть построены с небольшими вложенными компонентами, каждый из которых имеет шаблон и класс компонента. Пользовательские компоненты якобы тривиально создавать.[7]
Соглашение важнее конфигурации
Для настройки приложения Tapestry использует соглашения об именах и аннотации, а не XML.[8]
Резервное использование HTTPSession
Благодаря минимальному использованию HTTPSession, Tapestry обеспечивает высокую эффективность в кластерной среде с репликацией сеанса.[9]
Опубликовать / Перенаправить / Получить
Большинство форм отправляются после Опубликовать / Перенаправить / Получить (PRG), который сокращает количество случайных отправок форм и делает URL-адреса более удобными и удобными для закладок, а также позволяет кнопкам «Назад» и «Обновить» в браузере нормально работать.[10]
Инверсия управления (IoC)
Гобелен построен на легком Инверсия контроля слой со сходством с Google Guice, но разработан, чтобы сделать почти все аспекты поведения Tapestry настраиваемыми и заменяемыми.[11]

Пример Hello World

Минимальному шаблонному приложению Tapestry требуется всего три файла:

HelloWorld.tml
(X) HTML-шаблон для страницы / helloworld. Шаблоны гобеленов могут содержать любую правильно сформированную (X) разметку HTML.
<!DOCTYPE html> xmlns ="http://www.w3.org/1999/xhtml"       xmlns: t ="http://tapestry.apache.org/schema/tapestry_5_3.xsd"><body>    <p>Здравствуйте, $ {username}</p></body></html>
HelloWorld.java
Класс страницы, связанный с шаблоном. Здесь он просто предоставляет свойство * username *, к которому шаблон может получить доступ.
пакет org.example.demo.pages;/ ** Класс страницы (автоматически связанный с одноименным файлом шаблона) * /общественный класс Привет мир {    / ** Обычный геттер * /    общественный Строка getUsername() {        вернуть "Мир";    }}
web.xml
В сервлет заявление Дескриптор развертывания, который устанавливает Tapestry в качестве фильтра сервлетов.
<?xml version="1.0" encoding="UTF-8"?>Веб-приложение         PUBLIC "- // Sun Microsystems, Inc.//DTD Web Application 2.3 // RU"        "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app>    <display-name>Пример гобелена</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>приложение</filter-name>        <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>    </filter>    <filter-mapping>        <!-- Tell the servlet container that requests to send to the Tapestry servlet filter -->        <filter-name>приложение</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping></web-app>

Преобразование класса

Tapestry использует манипуляции с байт-кодом для преобразования классов страниц и компонентов во время выполнения. Такой подход позволяет писать классы страниц и компонентов как простые POJO, с несколькими соглашениями об именах и аннотациями, потенциально вызывающими существенное дополнительное поведение во время загрузки класса. В версиях гобеленов 5.0, 5.1 и 5.2 использовались Javassist Библиотека манипуляций с байт-кодом. Последующие версии заменили Javassist новым слоем манипулирования байт-кодом под названием Пластик это основано на ObjectWeb ASM.[12][13]

Клиентская поддержка

В состав Tapestry 5 версий до 5.3 входили Прототип и script.aculo.us Фреймворки JavaScript вместе со специальной библиотекой Tapestry для поддержки операций Ajax в качестве первоклассных граждан. Доступны сторонние модули для интеграции jQuery вместо или в дополнение к Prototype / Scriptaculous.

Начиная с версии 5.4, Tapestry включает новый уровень JavaScript, который устраняет зависимость встроенных компонентов от Prototype, позволяя подключать jQuery или другую структуру JavaScript.[14]

В версии 5.4 также появилась поддержка JavaScript. модули с помощью системы загрузки модуля RequireJS.

Основные принципы

Документация проекта Tapestry цитирует четыре «принципа», которые регулируют все решения по разработке Tapestry, начиная с версии 5 в 2008 году:[15]

  • Статическая структура, динамическое поведение - структура страниц и компонентов по существу статична, что устраняет необходимость в создании (и хранении в памяти сеанса) больших деревьев страниц и компонентов.
  • Адаптивный API - структура предназначена для адаптации к коду, а не для адаптации кода к платформе.
  • Различия общедоступных и внутренних API-интерфейсов - все API-интерфейсы явно являются «внутренними» (частными), за исключением тех, которые обязательно являются общедоступными.
  • Обеспечьте обратную совместимость. Как сообщается, разработчики Tapestry стремятся обеспечить простоту обновления до последней версии Tapestry.

Критика

Tapestry критиковали за отсутствие обратной совместимости между основными версиями, особенно это было отмечено при переходе с версии 4 на версию 5, когда для существующих приложений не было доступно чистого пути миграции.[16] Члены команды проекта признали это серьезной проблемой для пользователей Tapestry в прошлом, и обратная совместимость стала основной целью разработки Tapestry в будущем. С самого начала разработки версии 5 обратная совместимость была указана в качестве одного из четырех новых «Основных принципов» Tapestry, а два из трех других были предназначены для того, чтобы сделать развитие фреймворка возможным без ущерба для обратной совместимости. Члены команды проекта утверждают, что все выпуски Tapestry, начиная с 5.0, имеют высокую обратную совместимость.

Ранняя критика Tapestry 5 также упоминала документацию как недостаток. Участники проекта теперь заявляют, что этот недостаток в значительной степени устранен с помощью тщательно пересмотренного и обновленного Руководства пользователя и другой документации.

Начиная с версии 5.0, Tapestry объединяет библиотеки Prototype и Scriptaculous JavaScript. По словам Говарда Льюиса Шипа, в период 2008–2009 годов это был разумный выбор. Однако с тех пор популярность Prototype снизилась, а количество jQuery резко выросло. В ответ сообщество Tapestry разработало модули, позволяющие использовать jQuery в дополнение к Prototype или вместо него. Между тем, текущая версия Tapestry, 5.4, полностью удаляет зависимость от Prototype, заменяя ее уровнем совместимости, к которому можно подключить jQuery или Prototype (или, возможно, любую другую среду JavaScript).

Отношение к другим фреймворкам

По словам Говарда Льюиса Шипа, Tapestry изначально задумывалась как попытка реализовать на Java некоторые общие концепции и подходы, найденные в WebObjects, которые в то время были написаны на Цель-C и с закрытым исходным кодом.[17]

Apache Wicket был разработан как ответ на сложность ранних версий Tapestry, по словам создателя Wicket Джонатана Локка.[18]

Facelets, технология просмотра по умолчанию в JavaServer Faces, как сообщается, был вдохновлен ранними версиями Tapestry как попытка удовлетворить потребность в «фреймворке, подобном Tapestry, поддерживаемом JavaServer Faces в качестве отраслевого стандарта».[19][20]

История

ВерсияДатаОписание
Старая версия, больше не поддерживается: 1.02000Разработано Говардом Льюисом Шип для внутреннего использования
Старая версия, больше не поддерживается: 2.02002-04Впервые стал доступен SourceForge под Стандартная общественная лицензия ограниченного применения GNU.[21]
Старая версия, больше не поддерживается: 3.02004-04Первый выпуск под Apache, как подпроект Джакарты.[22]
Старая версия, больше не поддерживается: 4.02006-01Добавлена ​​поддержка аннотаций JDK 1.5, новая подсистема проверки ввода и улучшенная система отчетов об ошибках. [23]
Старая версия, но все еще поддерживается: 5.02008-12Практически полностью переписанный из Tapestry 4, представляющий новую компонентную модель на основе POJO с упором на соглашение, а не на конфигурацию, и заменяющий Hivemind новым слоем управления инверсией без XML.
Старая версия, но все еще поддерживается: 5.12009-04Улучшения производительности и памяти, автоматическое сжатие GZIP, агрегация JavaScript, но оставалась обратно совместимой с Tapestry 5.0.
Старая версия, но все еще поддерживается: 5.22010-12Добавлен Проверка компонентов JSR 303.[24] Расширенная перезагрузка живого класса для реализации служб. Удален пул страниц.[25]
Старая версия, но все еще поддерживается: 5.32011-11Добавлена ​​поддержка типа документа HTML5, аннотаций JSR-330 для внедрения,[26] улучшения производительности и памяти, новые компоненты, переключение с JavaAssist на манипулирование байт-кодом ASM
Старая версия, но все еще поддерживается: 5.3.1 - 5.3.82012-2014Исправления ошибок и незначительные улучшения
Текущая стабильная версия: 5.4-5.4.52015-2019Основные улучшения на стороне клиента. Новый уровень JavaScript для переключаемой поддержки jQuery / Prototype, использует Require.js для своей модульной системы JavaScript, Twitter Bootstrap для стиля по умолчанию.[27]
Текущая стабильная версия: 5.52020-03Текущая стабильная версия. Поддержка байт-кода Java 12, Typescript и Bootstrap 4.

Смотрите также

Рекомендации

  • Дробязко, Игорь (2012), Гобелен 5: Быстрая разработка веб-приложений на Java, Игорь Дробязко, с. 482, заархивировано из оригинал на 2014-12-15, получено 2013-01-20
  • Колесников, Александр (15 января 2008 г.), Tapestry 5: Создание веб-приложений: пошаговое руководство по веб-разработке на Java с помощью удобной для разработчиков инфраструктуры Apache Tapestry, Packt Publishing, п. 280, ISBN  1-84719-307-2
  • Иок Тонг, Ка (1 января 2007 г.), Наслаждаемся веб-разработкой с помощью Tapestry (3-е изд.), С. 497, г. КАК В  B00262M3HS
  • Корабль, Говард М. Льюис (2004), Гобелен в действии, Укомплектование персоналом, п. 580, г. ISBN  1932394117

Примечания

  1. ^ "ASF Git Repos - гобелен-5.git / commit". Получено 4 сентября 2019.
  2. ^ "Интервью Говарда Льюиса" Корабль гобеленов [часть 1] (2012-10-22) ". Архивировано из оригинал на 2013-01-22. Получено 2013-01-28.
  3. ^ Дробязко 2012, с. 1.
  4. ^ http://tapestryjava.blogspot.com/2006/07/tapestry-5-updates.html
  5. ^ Гобелен в действии - Предисловие Говарда Льюиса Шипа
  6. ^ http://tapestry.apache.org/class-reloading.html
  7. ^ Дробязко 2012, с. 20.
  8. ^ Дробязко 2012, с. 7.
  9. ^ http://tapestry.apache.org/performance-and-clustering.html
  10. ^ http://tapestry.apache.org/forms-and-validation.html
  11. ^ Дробязко 2012, с. 7.
  12. ^ http://tawus.wordpress.com/2011/04/18/meeting-plastic/
  13. ^ «Архивная копия». Архивировано из оригинал на 2013-06-18. Получено 2013-02-21.CS1 maint: заархивированная копия как заголовок (ссылка на сайт)
  14. ^ http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html
  15. ^ «Принципы». 2010-12-21. В архиве из оригинала 12 октября 2012 г.. Получено 2012-10-12.
  16. ^ "Совместимость Tapestry5 с будущим [sic]". 2009-04-30. Получено 2013-01-21.
  17. ^ «Архивная копия». Архивировано из оригинал на 2013-01-22. Получено 2013-01-28.CS1 maint: заархивированная копия как заголовок (ссылка на сайт)
  18. ^ https://web.archive.org/web/20040909074534/http://www.theserverside.com/news/thread.tss?thread_id=28162
  19. ^ https://web.archive.org/web/20070706220453/https://facelets.dev.java.net/
  20. ^ https://web.archive.org/web/20130113100928/http://www.jsfcentral.com/articles/facelets_1.html
  21. ^ «Гобелен: веб-компоненты Java версии 2.0 вышли». Получено 2013-01-20.
  22. ^ «Гобелен 3.0, финальный выпуск». Получено 2013-01-20.
  23. ^ «Гобелен 4.0 выпущен». Получено 2013-01-20.
  24. ^ "Гобелен и API проверки компонентов JSR-303". 2010-01-04. В архиве из оригинала 16 апреля 2010 г.. Получено 2010-03-13.
  25. ^ "Представляем Гобелен 5.2". 2010-12-17. В архиве из оригинала 14 ноября 2012 г.. Получено 2012-11-14.
  26. ^ http://tapestry.apache.org/using-jsr-330-standard-annotations.html
  27. ^ "Перепишите JavaScript". Архивировано из оригинал на 2012-11-14. Получено 2013-01-20.

внешняя ссылка