Apache Wicket , обычно называемый Wicket , является компонентным фреймворком веб-приложений для языка программирования Java, концептуально похожим на JavaServer Faces и Tapestry . Первоначально он был написан Джонатаном Локком в апреле 2004 года. Версия 1.0 была выпущена в июне 2005 года. Он перешел в проект верхнего уровня Apache в июне 2007 года. [2]
Традиционные фреймворки модель-представление-контроллер (MVC) работают с точки зрения целых запросов и целых страниц. В каждом цикле запроса входящий запрос сопоставляется с методом на объекте контроллера , который затем генерирует исходящий ответ в полном объеме, обычно путем извлечения данных из модели для заполнения представления, написанного в специализированной разметке шаблона . Это сохраняет поток управления приложением простым и понятным, но может затруднить повторное использование кода в контроллере.
Напротив, Wicket тесно связан с такими структурами GUI с сохранением состояния , как Swing . Приложения Wicket представляют собой деревья компонентов , которые используют делегатов -слушателей для реагирования на HTTP- запросы к ссылкам и формам таким же образом, как компоненты Swing реагируют на события мыши и нажатия клавиш. Wicket классифицируется как компонентно-ориентированная структура.
Wicket использует простой XHTML для шаблонизации (что обеспечивает четкое разделение логики представления и бизнес-логики и позволяет редактировать шаблоны с помощью обычных инструментов дизайна WYSIWYG [3] ). Каждый компонент привязан к именованному элементу в XHTML и становится ответственным за рендеринг этого элемента в конечном выводе. Страница — это просто компонент верхнего уровня, содержащий компонент, и она связана ровно с одним шаблоном XHTML. Используя специальный тег, группа отдельных компонентов может быть абстрагирована в один компонент, называемый панелью , который затем может быть повторно использован целиком на этой странице, других страницах или даже других панелях.
Каждый компонент поддерживается собственной моделью, которая представляет состояние компонента. Фреймворк не имеет знаний о том, как компоненты взаимодействуют со своими моделями, которые рассматриваются как непрозрачные объекты, автоматически сериализуемые и сохраняемые между запросами. Однако более сложные модели могут быть сделаны отделяемыми и предоставлять хуки для организации собственного хранения и восстановления в начале и конце каждого цикла запроса. Wicket не предписывает какой-либо определенный уровень сохранения объектов или ORM , поэтому приложения часто используют некоторую комбинацию объектов Hibernate [ требуется ссылка ] , EJB или POJO в качестве моделей.
В Wicket все серверные состояния управляются автоматически. Никогда не следует напрямую использовать объект HttpSession или подобную оболочку для хранения состояния. Вместо этого состояние связано с компонентами. Каждый серверный компонент страницы содержит вложенную иерархию компонентов с состоянием, где модель каждого компонента в конечном итоге является POJO (Plain Old Java Object)
Wicket стремится к простоте. В Wicket нет файлов конфигурации, которые нужно изучать. Wicket — это простая библиотека классов с последовательным подходом к структуре компонентов.
Приложение Hello World Wicket с четырьмя файлами:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns= "http://www.w3.org/1999/xhtml" xmlns:wicket= "http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" xml:lang= "en" lang= "en" > <body> <span wicket:id= "message" id= "message" > Сообщение будет здесь </span> </body> </html>
пакет org.wikipedia.wicket ; импорт org.apache.wicket.markup.html.WebPage ; импорт org.apache.wicket.markup.html.basic.Label ; public class HelloWorld extends WebPage { /** * Конструктор */ public HelloWorld () { add ( new Label ( "message" , "Hello World!" )); } }
пакет org.wikipedia.wicket ; импорт org.apache.wicket.protocol.http.WebApplication ; public class HelloWorldApplication extends WebApplication { /** * Конструктор. */ public HelloWorldApplication () { } /** * @see org.apache.wicket.Application#getHomePage() */ public Class getHomePage () { return HelloWorld . class ; } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns= "http://java.sun.com/xml/ns/javaee" xmlns:web= "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id= "WebApp_ID" version= "2.5" > <display-name> Пример Wicket </display-name> <filter> <filter-name> HelloWorldApplication </filter-name> <filter-class> org.apache.wicket.protocol.http.WicketFilter </filter-class> <init-param> <param-name> applicationClassName </param-name> <param-value> org.wikipedia.wicket.HelloWorldApplication </param-value> </init-param> </filter> <filter-mapping> <filter-name> HelloWorldApplication </filter-name> <url-pattern> /* </url-pattern> </filter-mapping> </web-app>
Базовые компоненты, такие как формы, ссылки, повторители и т. д., встроены.
{{cite web}}
: Отсутствует или пусто |title=
( помощь )Официальный сайт