WikiDer > Гобелен Apache
Оригинальный автор (ы) | Корабль Говарда Льюиса |
---|---|
Разработчики) | Фонд программного обеспечения Apache |
Стабильный выпуск | 5.6.1 / 19 июля 2020 г.[1] |
Репозиторий | Хранилище гобеленов |
Написано в | Ява |
Операционная система | Кроссплатформенность (Виртуальная машина Java) |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | гобелен |
Гобелен 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.0 | 2000 | Разработано Говардом Льюисом Шип для внутреннего использования |
2.0 | 2002-04 | Впервые стал доступен SourceForge под Стандартная общественная лицензия ограниченного применения GNU.[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. |
Смотрите также
Рекомендации
- Дробязко, Игорь (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
Примечания
- ^ "ASF Git Repos - гобелен-5.git / commit". Получено 4 сентября 2019.
- ^ "Интервью Говарда Льюиса" Корабль гобеленов [часть 1] (2012-10-22) ". Архивировано из оригинал на 2013-01-22. Получено 2013-01-28.
- ^ Дробязко 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. Получено 2013-02-21.CS1 maint: заархивированная копия как заголовок (ссылка на сайт)
- ^ http://tapestryjava.blogspot.com/2012/10/zeroing-in-on-tapestry-54.html
- ^ «Принципы». 2010-12-21. В архиве из оригинала 12 октября 2012 г.. Получено 2012-10-12.
- ^ "Совместимость Tapestry5 с будущим [sic]". 2009-04-30. Получено 2013-01-21.
- ^ «Архивная копия». Архивировано из оригинал на 2013-01-22. Получено 2013-01-28.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 вышли». Получено 2013-01-20.
- ^ «Гобелен 3.0, финальный выпуск». Получено 2013-01-20.
- ^ «Гобелен 4.0 выпущен». Получено 2013-01-20.
- ^ "Гобелен и API проверки компонентов JSR-303". 2010-01-04. В архиве из оригинала 16 апреля 2010 г.. Получено 2010-03-13.
- ^ "Представляем Гобелен 5.2". 2010-12-17. В архиве из оригинала 14 ноября 2012 г.. Получено 2012-11-14.
- ^ http://tapestry.apache.org/using-jsr-330-standard-annotations.html
- ^ "Перепишите JavaScript". Архивировано из оригинал на 2012-11-14. Получено 2013-01-20.