Gobelin Apache
Oryginalni autorzy | Statek Howarda Lewisa |
---|---|
Deweloperzy | Fundacja oprogramowania Apache |
Wersja stabilna | 5.8.2 / 20 czerwca 2022
|
Magazyn | Repozytorium gobelinów |
Napisane w | Jawa |
System operacyjny | Wieloplatformowość ( wirtualna maszyna Java ) |
Typ | Ramy aplikacji internetowych |
Licencja | Licencja Apache 2.0 |
Strona internetowa |
Apache Tapestry to zorientowana na komponenty platforma aplikacji internetowych Java o otwartym kodzie źródłowym , koncepcyjnie podobna do JavaServer Faces i Apache Wicket . Tapestry został stworzony przez Howarda Lewisa Shipa [ kiedy? ] i został przyjęty przez Apache Software Foundation jako projekt najwyższego poziomu w 2006 roku.
Tapestry kładzie nacisk na prostotę, łatwość użytkowania i produktywność programistów. Jest zgodny z Konwencji dotyczącej konfiguracji , eliminując prawie całą konfigurację XML. Tapestry wykorzystuje modułowe podejście do tworzenia stron internetowych poprzez silne powiązanie między każdym komponentem interfejsu użytkownika (obiektem) na stronie internetowej a odpowiadającą mu klasą Java . Ta oparta na komponentach architektura zapożycza wiele pomysłów z WebObjects .
Godne uwagi funkcje
- Live Class Reloading
- Tapestry monitoruje system plików pod kątem zmian w klasach stron Java, klasach komponentów, klasach implementacji usług, szablonach HTML i plikach właściwości komponentów, a następnie wymienia zmiany w działającej aplikacji bez konieczności ponownego uruchamiania. Zapewnia to bardzo krótki cykl informacji zwrotnych dotyczących zapisywania kodu i wyświetlania, co ma znacznie poprawić produktywność programistów.
- oparte na komponentach
- mogą być konstruowane z małych, zagnieżdżonych komponentów, z których każdy ma szablon i klasę komponentu. Niestandardowe komponenty są rzekomo trywialne w konstrukcji.
- Konwencja ponad konfiguracją
- Tapestry używa konwencji nazewnictwa i adnotacji zamiast XML, aby skonfigurować aplikację.
- Oszczędne wykorzystanie HTTPSession
- Dzięki minimalnemu wykorzystaniu HTTPSession, Tapestry został zaprojektowany tak, aby był wysoce wydajny w klastrowym środowisku z replikacją sesji.
- Post/Redirect/Get
- Większość przesłanych formularzy jest zgodna ze wzorcem Post/Redirect/Get (PRG), co ogranicza wielokrotne wysyłanie formularzy i sprawia, że adresy URL są bardziej przyjazne i można je dodawać do zakładek, a także umożliwia normalne działanie przycisków Wstecz i Odśwież w przeglądarce.
- Inversion of Control (IoC)
- Tapestry jest zbudowany na lekkiej warstwie Inversion of Control , która jest podobna do Google Guice , ale zaprojektowana tak, aby prawie wszystkie aspekty zachowania Tapestry były konfigurowalne i wymienialne.
Przykład Hello World
Minimalna, szablonowa aplikacja Tapestry wymaga tylko trzech plików:
- HelloWorld.tml
- Szablon (X)HTML dla strony /helloworld. Szablony gobelinów mogą zawierać dowolne poprawnie sformułowane znaczniki (X)HTML.
<!DOCTYPE html> <html xmlns= "http://www.w3.org/1999/xhtml" xmlns:t= "http://tapestry.apache.org/schema/tapestry_5_3.xsd" > <ciało > < p> Witaj, ${username} </p> </body> </html>
- HelloWorld.java
- Klasa strony powiązana z szablonem. W tym przypadku zapewnia jedynie właściwość *nazwa_użytkownika*, do której szablon ma dostęp.
pakiet org.example.demo.pages ; /** Klasa strony (automatycznie powiązana z plikiem szablonu o tej samej nazwie) */ public class HelloWorld { /** Zwykły getter */ public String getUsername () { return "World" ; } }
- web.xml
- Aplikacja serwletu Deployment Descriptor , która instaluje Tapestry jako filtr serwletu.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE aplikacja internetowa PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " http://java. sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name> Tapestry Przykład </display-name> <context-param> <!-- Powiedz Tapestry 5, gdzie szukać stron, komponentów i mixins --> <param-name> tapestry.app-package </param-name> <param-value> org.example.demo </param-value> </context-param> <filter> <!-- Zdefiniuj filtr serwletu Tapestry --> <filter-name> app </filter-name> <filter-class> org.apache.tapestry5.TapestryFilter </filter-class> </filter> <filter-mapping> <!- - Poinformuj kontener serwletu, który żąda wysłania do filtra serwletu Tapestry --> <nazwa-filtra> aplikacja </nazwa-filtra> < wzór-url> /* < /wzór-url> </mapowanie-filtra> </ aplikacja internetowa>
Transformacja klasy
Tapestry używa manipulacji kodem bajtowym do przekształcania klas stron i komponentów w czasie wykonywania. Takie podejście pozwala na pisanie klas stron i komponentów jako prostych obiektów POJO , z kilkoma konwencjami nazewnictwa i adnotacjami, które potencjalnie mogą powodować znaczne dodatkowe zachowanie w czasie ładowania klas. Wersje Tapestry 5.0, 5.1 i 5.2 korzystały z Javassist . Kolejne wersje zastąpiły Javassist nową warstwą manipulacji kodem bajtowym o nazwie Plastic , która jest oparta na ObjectWeb ASM .
Wsparcie po stronie klienta
Wersje Tapestry 5 do 5.3 zawierały frameworki JavaScript Prototype i script.aculo.us wraz z biblioteką specyficzną dla Tapestry, aby wspierać operacje Ajax jako obywatele pierwszej klasy. Dostępne są moduły innych firm umożliwiające integrację jQuery zamiast lub oprócz Prototype/Scriptaculous.
Począwszy od wersji 5.4, Tapestry zawiera nową warstwę JavaScript, która eliminuje zależność wbudowanych komponentów od Prototype, umożliwiając podłączenie jQuery lub innego frameworka JavaScript.
Wersja 5.4 wprowadza również obsługę modułów JavaScript za pomocą systemu ładowania modułów RequireJS.
Główne zasady
Dokumentacja projektu Tapestry cytuje cztery „zasady”, które rządzą wszystkimi decyzjami dotyczącymi rozwoju Tapestry, począwszy od wersji 5 z 2008 roku:
- Struktura statyczna, zachowanie dynamiczne — struktura stron i komponentów jest zasadniczo statyczna, co eliminuje potrzebę konstruowania (i przechowywania w pamięci sesji) dużych drzew stron i komponentów.
- Adaptacyjny interfejs API — platforma jest zaprojektowana tak, aby dostosowywała się do kodu, a nie do dostosowywania kodu do struktury
- Odróżnij publiczne i wewnętrzne interfejsy API — wszystkie interfejsy API są jawnie „wewnętrzne” (prywatne), z wyjątkiem tych, które z konieczności są publiczne.
- Zapewnij kompatybilność wsteczną — podobno programiści Tapestry dokładają wszelkich starań, aby aktualizacja do najnowszej wersji Tapestry była zawsze łatwa.
Krytyka
Tapestry był krytykowany za brak kompatybilności wstecznej między głównymi wersjami, szczególnie zauważono przy przejściu z wersji 4 do wersji 5, gdzie nie była dostępna czysta ścieżka migracji dla istniejących aplikacji. Członkowie zespołu projektowego uznali to za główny problem dla użytkowników Tapestry w przeszłości, a kompatybilność wsteczna stała się głównym celem projektowym dla Tapestry w przyszłości. Od samego początku tworzenia wersji 5 kompatybilność wsteczna była wymieniana jako jedna z czterech nowych „podstawowych zasad” Tapestry, a dwie z pozostałych trzech miały na celu umożliwienie ewolucji frameworka bez poświęcania kompatybilności wstecznej. Członkowie zespołu projektowego twierdzą, że wszystkie wydania Tapestry od wersji 5.0 były wysoce kompatybilne wstecz.
Wczesna krytyka Tapestry 5 również wymieniała dokumentację jako wadę. Członkowie projektu twierdzą obecnie, że ten brak został w dużej mierze wyeliminowany dzięki gruntownie zmienionemu i zaktualizowanemu Podręcznikowi użytkownika oraz innej dokumentacji.
Od wersji 5.0 Tapestry zawiera biblioteki Prototype i Scriptaculous JavaScript. Zdaniem Howarda Lewisa Shipa w latach 2008-2009 były to rozsądne wybory. Jednak od tego czasu popularność Prototype spadła, a jQuery dramatycznie wzrosła. W odpowiedzi społeczność Tapestry opracowała moduły, które umożliwiły użycie jQuery oprócz lub zamiast Prototype. Tymczasem obecna wersja Tapestry, 5.4, całkowicie usuwa zależność od Prototype, zastępując go warstwą kompatybilności, do której można podłączyć jQuery lub Prototype (lub potencjalnie dowolną inną platformę JavaScript).
Stosunek do innych ram
Według Howarda Lewisa Shipa, Tapestry był początkowo pomyślany jako próba zaimplementowania w Javie niektórych ogólnych koncepcji i podejść występujących w WebObjects, który był wówczas napisany w Objective-C i o zamkniętym kodzie źródłowym.
Apache Wicket został opracowany jako odpowiedź na złożoność wczesnych wersji Tapestry, według twórcy Wicket, Jonathana Locke'a.
Facelets , domyślna technologia widoku w JavaServer Faces , została podobno zainspirowana wczesnymi wersjami Tapestry, jako próba zaspokojenia zapotrzebowania na „ramę taką jak Tapestry, wspieraną przez JavaServer Faces jako standard branżowy”.
Historia
Wersja | Data | Opis |
---|---|---|
1.0 | 2000 | Opracowany przez Howarda Lewisa Shipa do użytku wewnętrznego |
2.0 | 2002-04 | Po raz pierwszy udostępniono na SourceForge na licencji GNU Lesser General Public License . |
3.0 | 2004-04 | Pierwsze wydanie w ramach Apache, jako podprojekt Dżakarty. |
4.0 | 2006-01 | Wprowadzono obsługę adnotacji JDK 1.5, nowy podsystem sprawdzania poprawności danych wejściowych oraz ulepszone raportowanie błędów |
5.0 | 2008-12 | Prawie całkowite przepisanie z Tapestry 4, wprowadzenie nowego modelu komponentów opartego na POJO, kładącego nacisk na konwencję nad konfiguracją, i zastąpienie Hivemind nową warstwą Inversion of Control bez XML. |
5.1 | 2009-04 | Ulepszenia wydajności i pamięci, automatyczna kompresja GZIP, agregacja JavaScript, ale pozostała wsteczna kompatybilność z Tapestry 5.0. |
5.2 | 2010-12 | Dodano walidację komponentu Bean JSR 303 . Rozszerzone przeładowywanie klas na żywo do implementacji usług. Usunięto łączenie stron. |
5.3 | 2011-11 | Dodano obsługę HTML5 doctype, adnotacje JSR-330 do wstrzykiwania, ulepszenia wydajności i pamięci, nowe komponenty, przełączono z JavaAssist na manipulację kodem bajtowym ASM |
5.3.1 - 5.3.8 | 2012-2014 | Poprawki błędów i drobne ulepszenia |
5.4-5.4.5 | 2015-2019 | Główne ulepszenia po stronie klienta. Nowa warstwa JavaScript dla przełączalnej obsługi jQuery/Prototype, używa Require.js dla swojego systemu modułów JavaScript, Twitter Bootstrap dla domyślnego stylu. |
5.5 | 2020-03 | Aktualna stabilna wersja. Obsługa kodu bajtowego Java 12, TypeScript i Bootstrap 4. |
Zobacz też
- Drobiazko, Igor (2012), Tapestry 5: Szybkie tworzenie aplikacji internetowych w Javie , Igor Drobiazko, s. 482, zarchiwizowane z oryginału w dniu 15.12.2014 , pobrane 20.01.2013
- Kolesnikov, Alexander (15 stycznia 2008), Tapestry 5: Tworzenie aplikacji internetowych: Przewodnik krok po kroku dotyczący tworzenia stron internetowych w języku Java z przyjaznym dla programistów frameworkiem Apache Tapestry , Packt Publishing , s. 280, ISBN 978-1-84719-307-0
- Iok Tong, Ka (1 stycznia 2007), Enjoying Web Development with Tapestry (3rd ed.), s. 497, ASIN B00262M3HS
- Lewis Ship, Howard (2004), Gobelin w akcji , Manning , s. 580, numer ISBN 1932394117