Меню
Главная
Случайная статья
Настройки
|
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]:
- Веб-страницы и их элементы — это объекты, а не просто текст, передающийся от сервера клиенту. Соответственно к ним возможно применять весь инструментарий объектно-ориентированного подхода к программированию, например наследование или полиморфизм.
- Веб-страницы и их элементы — это сущности, хранящие своё состояние (statefull entities), что следует из их объектной природы. Они могут хранить данные и ссылки на другие компоненты веб-приложения естественным образом. Как правило разработчику не требуется управлять механизмами сохранения пользовательских данных, например, на уровне http-сессии.
- Тестирование веб-приложения значительно упрощается, так как страницы и их компоненты являются чистыми java-объектами, что позволяет использовать классические способы тестирования программного кода, такие как JUnit. Кроме того, как правило фреймворки имеют дополнительные встроенные инструменты для тестирования приложений.
Отличие Wicket от других компонентно-ориентированных фреймворков
Среди популярных фреймворков-аналогов Wicket, реализующих схожий подход к проектированию веб-приложений, можно отметить GWT, JSF, Tapestry и Vaadin. По сравнению с ними Wicket имеет следующие преимущества[11]:
- Wicket является библиотекой с полностью открытым исходным кодом;
- Wicket полностью развивается сообществом программистов и не принадлежит какой-то коммерческой структуре;
- Архитектура Wicket направлена на то, чтобы как можно больше функциональности было достигнуто с помощью синтаксических средств чистого java-кода и простого HTML. Это касается в том числе взаимодействия компонентов на странице при помощи AJAX, которое можно реализовать без написания кода на JavaScript. При этом программный код полностью разделён с HTML и состоит только из Java, а в HTML добавляются только простые wicket-теги;
- С помощью Wicket можно использовать POJO и Java-beans, т.е. простые java-классы, на уровне веб-приложения, что значительно упрощает обработку пользовательских данных;
- Для работы с Wicket не требуется сложных конфигурационных XML-файлов, все настройки делаются в коде.
Версии
На текущий момент являются актуальными следующие версии Wicket[12]:
Версия |
Последний релиз |
Дата релиза |
Статус
|
Текущая версия: 9.x |
Текущая версия: 9.12.0 |
15 октября 2022 (2022-10-15)[13] |
Активная ветка разработки
|
Старая поддерживаемая версия: 8.x |
Старая поддерживаемая версия: 8.14.0 |
2 февраля 2022 (2022-02-02)[13] |
Поддерживается
|
Старая поддерживаемая версия: 7.x |
Старая поддерживаемая версия: 7.18.0 |
6 апреля 2021 (2021-04-06)[13] |
Осуществляются обновления, только связанные с безопасностью. Рекомендуется обновление до версии 9.x или 8.x
|
Версия |
Описание |
Дата релиза
|
Текущая версия: 9.12.0 |
|
15.10.2022[13]
|
Старая поддерживаемая версия: 9.11.0 |
|
10.07.2022[13]
|
Старая поддерживаемая версия: 9.10.0 |
|
05.05.2022[13]
|
Старая поддерживаемая версия: 9.9.1 |
|
08.04.2022[13]
|
Старая поддерживаемая версия: 9.9.0 |
|
30.03.2022[13]
|
Старая поддерживаемая версия: 9.8.0 |
|
06.02.2022[13]
|
Старая поддерживаемая версия: 9.7.0 |
|
01.12.2021[13]
|
Старая поддерживаемая версия: 9.6.0 |
|
02.11.2021[13]
|
Старая поддерживаемая версия: 9.5.0 |
|
12.09.2021[13]
|
Старая поддерживаемая версия: 9.4.0 |
|
07.07.2021[13]
|
Старая поддерживаемая версия: 9.3.0 |
|
30.03.2021[13]
|
Старая поддерживаемая версия: 9.2.0 |
|
19.11.2020[13]
|
Старая поддерживаемая версия: 9.1.0 |
|
11.10.2020[13]
|
Старая поддерживаемая версия: 9.0.0 |
|
15.06.2020[13]
|
Старая поддерживаемая версия: 9.0.0-M5 |
|
06.04.2020[13]
|
Старая поддерживаемая версия: 9.0.0-M4 |
|
09.01.2020[13]
|
Старая поддерживаемая версия: 9.0.0-M3 |
|
16.09.2019[13]
|
Старая поддерживаемая версия: 9.0.0-M2 |
|
02.06.2019[13]
|
Старая поддерживаемая версия: 9.0.0-M1 |
|
15.04.2019[13]
|
Легенда: Старая версия, не поддерживается Старая поддерживаемая версия Текущая версия Тестовая версия Будущая версия
|
|
|