stringtranslate.com

Гобелен Апачи

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

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

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

Перезагрузка живого класса
Tapestry отслеживает файловую систему на предмет изменений в классах страниц Java, классах компонентов, классах реализации служб, шаблонах HTML и файлах свойств компонентов, а также выполняет горячую замену изменений в работающем приложении без необходимости перезапуска. Это обеспечивает очень короткий цикл обратной связи код-сохранение-просмотр, который, как утверждается, значительно повышает производительность разработчика. [6]
На основе компонентов
Страницы могут быть созданы с помощью небольших вложенных компонентов, каждый из которых имеет шаблон и класс компонента. Предполагается, что пользовательские компоненты тривиальны для создания. [7]
Соглашение по конфигурации
Для настройки приложения Tapestry использует соглашения об именах и аннотации, а не XML. [8]
Экономное использование HTTPSession
Tapestry обеспечивает минимальное использование HTTPSession и высокую эффективность в кластеризованной среде с репликацией сеансов. [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> Здравствуйте, ${username} </p> </body> </html>     
HelloWorld.java
Класс страницы, связанный с шаблоном. Здесь он просто предоставляет свойство *username*, к которому шаблон может получить доступ.
пакет org.example.demo.pages ; /** Класс страницы (автоматически связанный с файлом шаблона с тем же именем) */ public class HelloWorld {    /** Обычный геттер */ 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 </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> app </filter-name> <filter-class> org.apache.tapestry5.TapestryFilter </filter-class> </filter> <filter-mapping> <!-- Сообщите контейнеру сервлета, какие запросы следует отправлять в фильтр сервлета Tapestry --> <filter-name> приложение </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, специфичной для Tapestry, чтобы поддерживать операции Ajax как первоклассные граждане. Доступны сторонние модули для интеграции jQuery вместо Prototype/Scriptaculous или в дополнение к ним.

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

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

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

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

Критика

Tapestry критиковали за отсутствие обратной совместимости между основными версиями, особенно это было отмечено при переходе с версии 4 на версию 5, когда не было чистого пути миграции для существующих приложений. [15] Члены команды проекта признали это как серьезную проблему для пользователей 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 и имел закрытый исходный код. [16]

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

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

История

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

Ссылки

Примечания

  1. ^ "Скачать".
  2. ^ "Интервью Говарда Льюиса о корабле Tapestry [часть 1] (2012-10-22)". Архивировано из оригинала 2013-01-22 . Получено 2013-01-28 .
  3. ^ Дробязко 2012, стр. 1.
  4. ^ "Tapestry Central: Обновления Tapestry 5". 24 июля 2006 г.
  5. ^ Гобелен в действии - Предисловие Говарда Льюиса Шипа
  6. ^ «Перезагрузка классов — Apache Tapestry».
  7. ^ Дробязко 2012, стр. 20.
  8. ^ ab Дробязко 2012, стр. 7.
  9. ^ «Производительность и кластеризация — Apache Tapestry».
  10. ^ «Формы и проверка — Apache Tapestry».
  11. ^ "Meeting Plastic I: Введение | Java Magic". 18 апреля 2011 г.
  12. ^ "[asm] Plastic: ASM-оболочка для Tapestry 5.3". Архивировано из оригинала 2013-06-18 . Получено 2013-02-21 .
  13. ^ "Tapestry Central: Нацеливаемся на Tapestry 5.4". 19 октября 2012 г.
  14. ^ "Принципы". 2010-12-21. Архивировано из оригинала 12 октября 2012 года . Получено 2012-10-12 .
  15. ^ "Tapestry5 future compatiblity [sic]". 2009-04-30. Архивировано из оригинала 2013-01-21 . Получено 2013-01-21 .
  16. ^ "DevRates | Интервью Говарда Льюиса о корабле Tapestry [часть 1]". Архивировано из оригинала 2013-01-22 . Получено 2013-01-28 .
  17. ^ «Wicket: Нужен ли нам еще один фреймворк уровня представления?». www.theserverside.com . Архивировано из оригинала 9 сентября 2004 г. . Получено 11 января 2022 г. .
  18. ^ "Facelets: JavaServer Facelets". facelets.dev.java.net . Архивировано из оригинала 6 июля 2007 г. Получено 11 января 2022 г.
  19. ^ "JSF Central - Inside Facelets Часть 1: Введение". www.jsfcentral.com . Архивировано из оригинала 13 января 2013 года . Получено 11 января 2022 года .
  20. ^ "Tapestry: Вышел выпуск Java Web Components 2.0" . Получено 20.01.2013 .
  21. ^ "Tapestry 3.0 Final Release" . Получено 2013-01-20 .
  22. ^ "Tapestry 4.0 Released" . Получено 2013-01-20 .
  23. ^ "Tapestry and JSR-303 Bean Validation API". 2010-01-04. Архивировано из оригинала 16 апреля 2010 года . Получено 2010-03-13 .
  24. ^ "Announcing Tapestry 5.2". 2010-12-17. Архивировано из оригинала 14 ноября 2012 года . Получено 2012-11-14 .
  25. ^ «Использование стандартных аннотаций JSR 330 — Apache Tapestry».
  26. ^ "JavaScript Rewrite". Архивировано из оригинала 2012-11-14 . Получено 2013-01-20 .

Внешние ссылки