Gobelin Apache

Gobelin Apache
Oryginalni autorzy Statek Howarda Lewisa
Deweloperzy Fundacja oprogramowania Apache
Wersja stabilna
5.8.2 / 20 czerwca 2022 ; 8 miesięcy temu ( 2022-06-20 )
Magazyn Repozytorium gobelinów
Napisane w Jawa
System operacyjny Wieloplatformowość ( wirtualna maszyna Java )
Typ Ramy aplikacji internetowych
Licencja Licencja Apache 2.0
Strona internetowa gobelin .apache .org

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
Stara wersja, nie jest już obsługiwana: 1.0 2000 Opracowany przez Howarda Lewisa Shipa do użytku wewnętrznego
Stara wersja, nie jest już obsługiwana: 2.0 2002-04 Po raz pierwszy udostępniono na SourceForge na licencji GNU Lesser General Public License .
Stara wersja, nie jest już obsługiwana: 3.0 2004-04 Pierwsze wydanie w ramach Apache, jako podprojekt Dżakarty.
Stara wersja, nie jest już obsługiwana: 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
Starsza wersja, ale nadal utrzymywana: 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.
Starsza wersja, ale nadal utrzymywana: 5.1 2009-04 Ulepszenia wydajności i pamięci, automatyczna kompresja GZIP, agregacja JavaScript, ale pozostała wsteczna kompatybilność z Tapestry 5.0.
Starsza wersja, ale nadal utrzymywana: 5.2 2010-12 Dodano walidację komponentu Bean JSR 303 . Rozszerzone przeładowywanie klas na żywo do implementacji usług. Usunięto łączenie stron.
Starsza wersja, ale nadal utrzymywana: 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
Starsza wersja, ale nadal utrzymywana: 5.3.1 - 5.3.8 2012-2014 Poprawki błędów i drobne ulepszenia
Aktualna stabilna wersja: 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.
Aktualna stabilna wersja: 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

Notatki

Linki zewnętrzne