Apache WicketAz Apache Wicket gyakran csak Wicket, egy pehelysúlyú komponens alapú java nyelvű webalkalmazás keretrendszer, hasonló JavaServer Faces-hez illetve a Tapestry-hez. Eredetileg Jonathan Locke kezdte írni 2004 áprilisában. Az 1.0-s verziót 2005 júniusában adták ki. 2007 júniusában vált az Apache felsőszintű projektjévé.[1] Működési elveA hagyományos modell-nézet-vezérlő (angol rövidítéssel MVC) keretrendszerek a teljes HTTP-kérésre és teljes oldalra alapozva működnek. Minden kérési ciklusban a bejövő kérések le vannak képezve egy metódusra a vezérlő objektumban, amely ezután generálja a kimenő választ az teljes egészében, általában adatokat szedve ki egy modellből, amivel aztán feltölt egy speciális webes sablonnyelvben írt nézetet. Ez teszi a alkalmazás vezérlési folyamatát tisztává és egyszerűvé, ugyanakkor a kód-újrafelhasználást a vezérlőben bonyolulttá. Ezzel szemben a Wicket esetében az állapottal rendelkező GUI-keretrendszerek szolgáltak mintául, mint amilyen pl. a Swing. A Wicket alkalmazások komponensfák, melyek figyelőket (angolul listener) delegálnak hogy reagáljanak a HTTP-kérésekre (hivatkozásokra és formokra), ugyanolyan módon, mint a Swing-komponensek reagálnak az egér- és billentyűzeteseményekre. Ezért a Wicketet komponens alapú keretrendszerek közé lehet sorolni, ha kategorizálni szeretnénk. Tervezési alapelvekA Wicket egyszerű XHTML szöveges fájlokat használ a sablonokhoz (angolul template), mely megköveteli a megjelenítés és az üzleti logika tiszta különválasztását és lehetővé teszi a sablonok szerkeszthetőségét hagyományos WYSIWYG szerkesztőeszközökkel.[2] Mindegyik komponens egy nevesített elemhez van kötve az XHTML-ben, és felelős az adott elem rendeléséért a végső kimenetben. Az oldal egyszerűen egy felső szintű komponens és pontosan egy XHTML sablonnal van párosítva. Egy speciális címkét (angolul tag) használva, egyes komponens csoportok kiemelhetők egy ún panal komponensbe, amely teljes mértékben újrafelhasználható az adott oldalon, más oldalakon vagy teljesen más paneleken. Minden komponenst a saját modellje támogat, amely reprezentálja a komponens állapotát. A keretrendszernek nincs tudomása arról, hogy a komponensek hogyan kommunikálnak a modelljükkel, amelyek feketedoboz-objektumként viselkednek, automatikusan szerializáltak és perzisztáltak a kérések között. Az összetettebb modellek leválaszthatók (angolul detachable) és hookokat nyújtanak ahhoz, hogy gondoskodjanak a saját tárolásukról és visszaállításukról minden kérési ciklus elején és a végén. A Wicket nem követel meg semmilyen objektumperzisztencia vagy ORM réteget, így az alkalmazások gyakran használják a Hibernate objektumok, EJB vagy POJOk egyfajta kombinációját modellként. A Wicketben minden szerver oldali állapot automatikusan kezelve van. Soha nincs szükség a HttpSession objektum vagy hasonló csomagoló közvetlen használatához az állapot tárolásához. E helyett az állapot a komponensekhez tartozik. Minden szerver oldali oldal komponens tartalmaz állapottal rendelkező komponensek beágyazott hierarchiáját, ahol minden komponens modellje végül is egy POJO (Plain Old Java Object). A Wicket leginkább az egyszerűségről szól. Nincsenek konfigurációs fájlok, melyeket meg kell tanulni a Wicketben. A Wicket egy egyszerű osztályhierarchia a komponens struktúrához következetes megközelítéssel. PéldaEgy Hello World Wicket alkalmazás, 4 fájllal:
<!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">Message goes here</span>
</body>
</html>
package org.wikipedia.wicket;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
public class HelloWorld extends WebPage {
/**
* Constructor
*/
public HelloWorld() {
add(new Label("message", "Hello World!"));
}
}
package org.wikipedia.wicket;
import org.apache.wicket.protocol.http.WebApplication;
public class HelloWorldApplication extends WebApplication {
/**
* Constructor.
*/
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 Example</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>
Komponensek
Kiadások
Kapcsolódó szócikkekForrások
Jegyzetek
További információkCikkek a témában
BlogokDokumentáció
Fordítás
|
Portal di Ensiklopedia Dunia