Автор (ы) оригинала | Корабль Говарда Льюиса |
---|---|
Разработчики) | Фонд программного обеспечения Apache |
Стабильный выпуск | 5.6.1 / 19 июля 2020 г . [1] |
Репозиторий | Хранилище гобеленов |
Написано в | Ява |
Операционная система | Кроссплатформенность ( виртуальная машина Java ) |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | гобелен |
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]
История [ править ]
Версия | Дата | Описание |
---|---|---|
1.0 | 2000 г. | Разработан Говардом Льюисом Шип для внутреннего использования |
2.0 | 2002-04 | Впервые опубликовано на SourceForge по лицензии GNU Lesser General Public License . [21] |
3.0 | 2004-04 | Первый выпуск под Apache в качестве подпроекта Джакарты. [22] |
4.0 | 2006-01 | Введена поддержка аннотаций JDK 1.5, новая подсистема проверки ввода и улучшенная система отчетов об ошибках [23] |
5.0 | 2008-12 | Практически полностью переписанный из Tapestry 4, представляющий новую компонентную модель на основе POJO с упором на соглашение, а не на конфигурацию, и заменяющий Hivemind новым слоем управления инверсией без XML. |
5.1 | 2009-04 | Улучшения производительности и памяти, автоматическое сжатие GZIP, агрегация JavaScript, но оставалась обратно совместимой с Tapestry 5.0. |
5.2 | 2010-12 | Добавлена проверка компонентов JSR 303 . [24] Расширенная перезагрузка живого класса для реализации служб. Удален пул страниц. [25] |
5,3 | 2011-11 | Добавлена поддержка документа HTML5, аннотаций JSR-330 для внедрения, [26] улучшения производительности и памяти, новые компоненты, переключение с 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 для стиля по умолчанию. [27] |
5.5 | 2020-03 | Текущая стабильная версия. Поддержка байт-кода Java 12, Typescript и Bootstrap 4. |
См. Также [ править ]
- 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
Заметки [ править ]
- ^ "ASF Git Repos - гобелен-5.git / commit" . Проверено 4 сентября 2019 года .
- ^ "Интервью Говарда Льюиса" Корабль гобеленов [часть 1] (2012-10-22) " . Архивировано из оригинала на 2013-01-22 . Проверено 28 января 2013 .
- ^ Дробязко 2012, с. 1.
- ^ http://tapestryjava.blogspot.com/2006/07/tapestry-5-updates.html
- ↑ Гобелен в действии - Предисловие Говарда Льюиса Шипа
- ^ http://tapestry.apache.org/class-reloading.html
- ^ Дробязко 2012, с. 20.
- ^ Дробязко 2012, с. 7.
- ^ http://tapestry.apache.org/performance-and-clustering.html
- ^ http://tapestry.apache.org/forms-and-validation.html
- ^ Дробязко 2012, с. 7.
- ^ http://tawus.wordpress.com/2011/04/18/meeting-plastic/
- ^ "Архивная копия" . Архивировано из оригинала на 2013-06-18 . Проверено 21 февраля 2013 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html
- ^ «Принципы» . 21 декабря 2010 г. Архивировано 12 октября 2012 года . Проверено 12 октября 2012 .
- ^ "Совместимость Tapestry5 в будущем [ sic ]" . 2009-04-30 . Проверено 21 января 2013 .
- ^ "Архивная копия" . Архивировано из оригинала на 2013-01-22 . Проверено 28 января 2013 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ https://web.archive.org/web/20040909074534/http://www.theserverside.com/news/thread.tss?thread_id=28162
- ^ https://web.archive.org/web/20070706220453/https://facelets.dev.java.net/
- ^ https://web.archive.org/web/20130113100928/http://www.jsfcentral.com/articles/facelets_1.html
- ^ «Гобелен: веб-компоненты Java версии 2.0 вышли» . Проверено 20 января 2013 .
- ^ "Гобелен 3.0 Окончательный выпуск" . Проверено 20 января 2013 .
- ^ "Гобелен 4.0 выпущен" . Проверено 20 января 2013 .
- ^ "Гобелен и API проверки компонентов JSR-303" . 2010-01-04. Архивировано 16 апреля 2010 года . Проверено 13 марта 2010 .
- ^ "Объявление Гобелен 5.2" . 2010-12-17. Архивировано 14 ноября 2012 года . Проверено 14 ноября 2012 .
- ^ http://tapestry.apache.org/using-jsr-330-standard-annotations.html
- ^ «Перепишите JavaScript» . Архивировано из оригинала на 2012-11-14 . Проверено 20 января 2013 .
Внешние ссылки [ править ]
- Официальный веб-сайт