Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Гобелен подчеркивает простоту, удобство использования и продуктивность разработчика. Он придерживается парадигмы « Конвенция над конфигурацией» , устраняя почти все конфигурации 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 настраиваемыми и заменяемыми. [11]

Пример Hello World [ править ]

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

HelloWorld.tml
(X) HTML-шаблон для страницы / helloworld. Шаблоны гобеленов могут содержать любую правильно сформированную (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> Здравствуйте, $ {username} </p> </body> </html>
HelloWorld.java
Класс страницы, связанный с шаблоном. Здесь он просто предоставляет свойство * username *, к которому шаблон может получить доступ.
пакет  org.example.demo.pages ;/ ** Класс страницы (автоматически связанный с одноименным файлом шаблона) * / public  class  HelloWorld  { / ** Обычный метод получения * /  public  String  getUsername ()  {  return  "World" ;  } }
web.xml
Сервлет приложения развертывания Descriptor , который устанавливает Гобелен как сервлет фильтр.
<? xml version = "1.0" encoding = "UTF-8"?> <! Веб-приложение DOCTYPE  PUBLIC "- // Sun Microsystems, Inc. // Веб-приложение DTD 2.3 // EN"  "http: // java. sun.com/dtd/web-app_2_3.dtd "> <web-app>  <display-name> Пример гобелена </display-name>  <context-param>  <! - Сообщите Tapestry 5, где искать страницы и компоненты и миксины ->  <param-name> tapestry.app-package </param-name>  <param-value> org.example.demo </param-value>  </context-param>  <filter>  <! - Определите фильтр сервлета Tapestry ->  <имя-фильтра>приложение </filter-name>  <filter-class>org.apache.tapestry5.TapestryFilter </filter-class>  </filter>  <filter-mapping>  <! - Сообщите контейнеру сервлета, какие запросы отправлять в фильтр сервлета Tapestry ->  <filter-name> app </ имя-фильтра>  <url-pattern> / * </url-pattern>  </filter-mapping> </web-app>

Преобразование класса [ править ]

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

Клиентская поддержка [ править ]

Версии Tapestry 5 до 5.3 включали в себя JavaScript-фреймворки Prototype и script.aculo.us вместе со специальной библиотекой 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, которая в то время была написана на Objective-C и с закрытым исходным кодом. [17]

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

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

История [ править ]

См. Также [ править ]

  • Apache Wicket
  • Сравнение веб-фреймворков
  • Facelets
  • Java EE
  • Технологии и фреймворки Java View

Ссылки [ править ]

  • Дробязко, Игорь (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 г.), Наслаждаясь веб-разработкой с помощью гобелена (3-е изд.), Стр. 497, ASIN  B00262M3HS
  • Льюис Шип, Ховард (2004), Гобелен в действии , Мэннинг , стр. 580, ISBN 1932394117

Заметки [ править ]

  1. ^ "ASF Git Repos - гобелен-5.git / commit" . Проверено 4 сентября 2019 года .
  2. ^ "Интервью Говарда Льюиса" Корабль гобеленов [часть 1] (2012-10-22) " . Архивировано из оригинала на 2013-01-22 . Проверено 28 января 2013 .
  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 . Проверено 21 февраля 2013 .CS1 maint: заархивированная копия как заголовок ( ссылка )
  14. ^ http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html
  15. ^ «Принципы» . 21 декабря 2010 г. Архивировано 12 октября 2012 года . Проверено 12 октября 2012 .
  16. ^ "Совместимость Tapestry5 в будущем [ sic ]" . 2009-04-30 . Проверено 21 января 2013 .
  17. ^ "Архивная копия" . Архивировано из оригинала на 2013-01-22 . Проверено 28 января 2013 .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 вышли» . Проверено 20 января 2013 .
  22. ^ "Гобелен 3.0 Окончательный выпуск" . Проверено 20 января 2013 .
  23. ^ "Гобелен 4.0 выпущен" . Проверено 20 января 2013 .
  24. ^ "Гобелен и API проверки компонентов JSR-303" . 2010-01-04. Архивировано 16 апреля 2010 года . Проверено 13 марта 2010 .
  25. ^ "Объявление Гобелен 5.2" . 2010-12-17. Архивировано 14 ноября 2012 года . Проверено 14 ноября 2012 .
  26. ^ http://tapestry.apache.org/using-jsr-330-standard-annotations.html
  27. ^ «Перепишите JavaScript» . Архивировано из оригинала на 2012-11-14 . Проверено 20 января 2013 .

Внешние ссылки [ править ]

  • Официальный веб-сайт