Wicket

Apache Wicket
Логотип программы Apache Wicket
Тип веб-фреймворк
Разработчик Apache Software Foundation
Написана на Java
Операционная система Кроссплатформенное ПО
Первый выпуск 7 июня 2005[1]
Аппаратная платформа Java Virtual Machine
Последняя версия
— 7.18.0 (6 апреля 2021; 3 года назад (2021-04-06))
8x — 8.14.0 (2 февраля 2022; 2 года назад (2022-02-02))
9x — 9.12.0 (15 октября 2022; 2 года назад (2022-10-15))
Репозиторий git.apache.org/wicket.git
Состояние Активное
Лицензия Apache License 2.0
Сайт wicket.apache.org
Логотип Викисклада Медиафайлы на Викискладе

Apache Wicket — компонентно-ориентированный фреймворк с открытым исходным кодом для создания веб-приложений. Разработан Джонатаном Локе (англ. Jonathan Locke) в 2004 году. С июня 2007 года является проектом Apache Software Foundation верхнего уровня.

Общее описание

Предпосылки к разработке

Первая половина 2000-х годов стала временем создания многих популярных веб-фреймворков, используемых до сегодняшнего времени. Большая их часть так или иначе реализовывала модель web-MVC, также широко известную под именем Model 2, например Struts, WebWork (позднее переименованный в Apache Struts 2[англ.]), Spring MVC, Velocity, Stripes[2]. Подход к проектированию, применяемый в этих фреймворках, помогал отделить код, отвечающий за логику работы программы, от кода, отвечающего за отображение информации на экране пользователя. Однако ни один из этих фреймворков не предлагал полноценный объектно-ориентированный уровень абстракции от механизмов функционирования WEB-сервера, и разработчик был вынужден учитывать множество специфичных нюансов, например особенности работы HTTP/HTTPS-протоколов, обработку запросов и ответов сервера, способы хранения данных в пользовательской сессии, генерацию и обработку URL страниц и т.д. Но основным ограничением MVC шаблона стало то, что протокол HTTP/HTTPS, используемый для передачи данных, не имеет встроенных механизмов для сохранения информации о предыдущих действиях пользователя (т.е. является stаteless-протоколом), в то время как логика работы большинства web-приложений, напротив, подразумевала необходимость совершить множество связанных действий с различными веб-страницами, передавая данные и результаты их обработки между ними. Т.е. шаблон Model 2 хорошо подходил для сайтов, где требовалось отображать пользователю статичные документы, и на которых не требовалось совершать цепочки действий на нескольких страницах. Но в веб-приложениях, напротив, пользователи зачастую работали со множеством связанных компонентов, заполняли последовательно множество форм, требовали возможность вернуться к ранее введенным данным и т.д. И для этих целей Model 2, в силу своей архитектуры, привязанной к реализации передачи данных по протоколу HTTP, подходил очень плохо. Это фундаментальное ограничение, присущее шаблону web-MVC, стало причиной разработки новой плеяды веб-фреймворков, которые получили название компонентно-ориентированных, с совершенно другим подходом к проектированию архитектуры веб-приложений, который позволял сделать комфортной работу со всем массивом введенных пользователями данных и позволял строить сложные интерфейсы с богатой функциональностью, практически ничем не уступающие классическим десктоп-приложениям. И одним из этих фреймворков стал Wicket[3][4].

Разработка над первоначальной версией Wicket была начата весной 2004 года двумя сотрудниками компании Sun Microsystems - Джонатаном Локком (Jonathan Locke) и Мико Матцумурой (Miko Matsumura). Название Wicket было дано проекту Мико Матцумурой. В игре крикет термин wicket обозначает небольшие ворота, в которые боулер[англ.] должен попасть мячом (a small framework at which the bowler aims the ball), т.е. в названии фреймворка используется игра слов на английском языке[5].

Первая альфа-версия Wicket была опубликована на хостинге свободного программного обеспечения Codehaus.org под свободной лицензией Apache license[6]. После публикации она привлекла внимание группу программистов из Датской консалтинговой компании Topicus, под руководством Элко Хилениуса (Eelco Hillenius), Мартина Дашорста (Martijn Dashorst) и Йохана Компайнера (Johan Compagner), также к ним присоединились Юрген Доннерстаг (Juergen Donnerstag) и Крис Тюрнер (Chris Turner). Эта группа людей стала основоположниками сообщества Wicket и внесла значительный вклад в разработку и популяризацию фреймворка во всём мире[5].

Первая стабильная версия Wicket 1.0 была опубликована 7 июня 2005 года[7].

В июне 2007 года Wicket вошёл в группу проектов Apache Software Foundation как проект верхнего уровня[8].

Особенности Wicket как компонентно-ориентированного фреймворка

Компонентно-ориентированные фреймворки отличаются от классических веб-фреймворков тем, что в них на стороне сервера создаётся и сохраняется модель веб-страницы, которая была открыта пользователем. HTML-код генерируется исходя из содержимого этой модели и затем отсылается клиенту. С таким подходом всё содержимое веб-страницы и все её компоненты (формы, поля ввода, ссылки, и т.д.) представлены в программе в виде чистых java-объектов, что делает возможным их обработку всеми средствами языка java. Данный подход очень похож на тот, что применяется в GUI фреймворках (таких как AWT, Swing или SWT) по отношению к графическому окну приложения и его компонентам. По сути Wicket и другие похожие фреймворки привнесли в веб-разработку подход, который ранее использовался для создания интерфейса классических десктоп-приложений. В большинстве из этих фреймворков детали работы с HTTP протоколом скрыты от разработчика, а также в них довольно естественным образом решены проблемы с сохранением пользовательских данных на стороне сервера[9].

Основные преимущества, присущие в той или иной степени всем компонентно-ориентированным фреймворкам можно свести к следующим[10]:

  1. Веб-страницы и их элементы — это объекты, а не просто текст, передающийся от сервера клиенту. Соответственно к ним возможно применять весь инструментарий объектно-ориентированного подхода к программированию, например наследование или полиморфизм.
  2. Веб-страницы и их элементы — это сущности, хранящие своё состояние (statefull entities), что следует из их объектной природы. Они могут хранить данные и ссылки на другие компоненты веб-приложения естественным образом. Как правило разработчику не требуется управлять механизмами сохранения пользовательских данных, например, на уровне http-сессии.
  3. Тестирование веб-приложения значительно упрощается, так как страницы и их компоненты являются чистыми java-объектами, что позволяет использовать классические способы тестирования программного кода, такие как JUnit. Кроме того, как правило фреймворки имеют дополнительные встроенные инструменты для тестирования приложений.

Отличие Wicket от других компонентно-ориентированных фреймворков

Среди популярных фреймворков-аналогов Wicket, реализующих схожий подход к проектированию веб-приложений, можно отметить GWT, JSF, Tapestry и Vaadin. По сравнению с ними Wicket имеет следующие преимущества[11]:

  1. Wicket является библиотекой с полностью открытым исходным кодом;
  2. Wicket полностью развивается сообществом программистов и не принадлежит какой-то коммерческой структуре;
  3. Архитектура Wicket направлена на то, чтобы как можно больше функциональности было достигнуто с помощью синтаксических средств чистого java-кода и простого HTML. Это касается в том числе взаимодействия компонентов на странице при помощи AJAX, которое можно реализовать без написания кода на JavaScript. При этом программный код полностью разделён с HTML и состоит только из Java, а в HTML добавляются только простые wicket-теги;
  4. С помощью Wicket можно использовать POJO и Java-beans, т.е. простые java-классы, на уровне веб-приложения, что значительно упрощает обработку пользовательских данных;
  5. Для работы с Wicket не требуется сложных конфигурационных XML-файлов, все настройки делаются в коде.

Версии

На текущий момент являются актуальными следующие версии Wicket[12]:

Версия Последний релиз Дата релиза Статус
Текущая версия: 9.x Текущая версия: 9.12.0 15 октября 2022; 2 года назад (2022-10-15)[13] Активная ветка разработки
Старая поддерживаемая версия: 8.x Старая поддерживаемая версия: 8.14.0 2 февраля 2022; 2 года назад (2022-02-02)[13] Поддерживается
Старая поддерживаемая версия: 7.x Старая поддерживаемая версия: 7.18.0 6 апреля 2021; 3 года назад (2021-04-06)[13] Осуществляются обновления, только связанные с безопасностью. Рекомендуется обновление до версии 9.x или 8.x

Примечания

  1. https://web.archive.org/web/20080106072452/http://wicket.sourceforge.net/wicket-1.0/
  2. Wicket in action, 2008, What problems does Wicket solve?, с. 32.
  3. Wicket9, 2022, Why should I learn Wicket?, с. 3.
  4. Jonathan Locke. Why Wicket? (англ.). Codehaus. Дата обращения: 27 ноября 2022. Архивировано 20 августа 2004 года.
  5. 1 2 Wicket in action, 2008, Foreword, с. 18.
  6. Download the Wicket SDK (англ.). Codehaus. Дата обращения: 27 ноября 2022. Архивировано 20 августа 2004 года.
  7. The Wicket development team. June 7, 2005 - Wicket 1.0 available for download (англ.). Дата обращения: 27 ноября 2022. Архивировано 27 ноября 2022 года.
  8. 3… 2… 1… Apache Wicket. Дата обращения: 27 июня 2011. Архивировано из оригинала 14 июля 2011 года.
  9. Wicket9, 2022, Component oriented frameworks - an overview, с. 4.
  10. Wicket9, 2022, Benefits of component oriented frameworks for web development, с. 4.
  11. Wicket9, 2022, Wicket vs the other component oriented frameworks, с. 4.
  12. Download Apache Wicket | Apache Wicket. Дата обращения: 2 декабря 2022. Архивировано 2 декабря 2022 года.
  13. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 Wicket - News. wicket.apache.org. Дата обращения: 27 ноября 2022. Архивировано 27 сентября 2022 года.
  14. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Wicket 1.3 - News archive. wicket.sourceforge.net. Дата обращения: 27 ноября 2022. Архивировано 19 июня 2010 года.
  15. 1 2 3 4 5 Wicket 1.3 - News archive. wicket.sourceforge.net. Дата обращения: 27 ноября 2022. Архивировано 23 февраля 2008 года.
  16. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Wicket 1.2 - News archive. wicket.sourceforge.net. Дата обращения: 27 ноября 2022. Архивировано 27 ноября 2022 года.
  17. https://web.archive.org/web/20070102041418/http://docs.codehaus.org/download/attachments/8509/Wicket-SDK-0.9.2-alpha.zip

Литература

  • Andrea Del Bene, Martin Grigorov, Tobias Soloschenko, Igor Vaynberg et al. Wicket 9.x Reference Guide (англ.). — The Apache Software Foundation, 2022. — 352 p.
  • Martijn Dashorst, Eelco Hillenius. Wicket in Action (англ.). — Мэннинг[англ.], 2008. — 392 p. — ISBN 1-932394-98-2.
  • Vaynberg, Igor. Apache Wicket Cookbook (неопр.). — 1st. — Packt Publishing[англ.], 2011. — С. 312. — ISBN 1-84951-160-8.
  • Gurumurthy, Karthik. Pro Wicket (неопр.). — 1st. — Apress, 2006. — С. 328. — ISBN 1-59059-722-2. Архивная копия от 23 декабря 2010 на Wayback Machine

Ссылки