idrobiazko Einführung in Tapestry 5

geschrieben am 15. Dezember 2009 von unserem Experten Igor Drobiazko

Tapestry ist ein Open-Source-Framework der Apache Software Foundation zur Entwicklung von dynamischen und skalierbaren Webanwendungen in Java. Tapestrys Design ermöglicht die Entwicklung von Webanwendungen mit minimalem Aufwand.

In diesem Blog-Post werde ich eine Einführung in Tapestry geben und zeigen, dass der Einstiegsaufwand relativ klein ist.

Zur Installation Ihrer ersten Tapestry-Anwendung laden Sie das Archiv helloworld.war herunter und importieren Sie es in ein IDE (Integrated Development Environment) Ihrer Wahl. Nun lassen Sie uns die Struktur der importierten Anwendung anschauen. Zunächst betrachten wir die Datei web.xml im Verzeichnis WebContent/WEB-INF.

Tapestry_Projekt_Struktur

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app 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 5 Buch</display-name>
    <context-param>
        <param-name>tapestry.app-package</param-name>
        <param-value>de.t5book</param-value>
    </context-param>
    <filter>
        <filter-name>app</filter-name>
        <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>app</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>


Zwei Aspekte sind nennenswert; zum einen der Name des Tapestry-Filters, zum anderen der Context-Parameter tapestry.app-package. Der Tapestry-Filter ist eine Implementierung des Interface javax.servlet.Filter, die zur Behandlung von Anfragen an Tapestry-Anwedungen zuständig ist. Der Context-Parameter tapestry.app-package gibt das Wurzelpaket Ihrer Anwendung an und ist die einzige Stelle in Tapestry, die mittels XML konfiguriert wird. Ausgehend von diesem Wurzelpaket such Tapestry nach Seiten und Komponenten in vordefinierten Unterpaketen.

Eine Tapestry-Anwendung besteht aus einer Menge von Seiten, Komponenten und Diensten.  Jede Seite kann mehrere Komponenten enthalten. Komponenten können ihrerseits aus weiteren Komponenten zusammengebaut werden. Nach der vordefinierten Namenskonvention such Tapestry nach Klassen von Seiten im Unterpaket pages. In diesem Beispiel ist de.t5book als Wurzelpaket der Anwendung konfiguriert. Also such Tapestry im Paket de.t5book.pages nach Klassen von Seiten. Klassen von Komponenten werden im Paket de.t5book.components erwartet.

Jede Seite oder Komponente wird durch eine Java-Klasse und ein optionales Template repräsentiert. Schauen wir uns dazu die Seite Index an. Es handelt sich um eine einfache Java-Klasse mit einer Getter-Methode. Beachten Sie, dass diese Seite ein reines POJO (Plain Old Java Object) ist. Im Gegensatz zu beinahe allen Java-Webframeworks werden Sie von Tapestry nicht gezwungen, die Klassen der Seiten oder der Komponenten von vorgeschriebenen Superklassen abzuleiten oder bestimmte Interfaces zu implementieren.

public class Index {

    public String getHello() {
        return "Hello, World!";
    }
}

Wie bereits erwähnt kann jede Seite und Komponente ein optionales Template enthalten. Das Matching zwischen einer Klasse und dem zugehörigen Template erfolgt über die Namen der beiden Dateien. Also such Tapestry für die Seite Index nach einer Datei Index.tml. Die Endung .tml steht für Tapestry Markup Language (TML). Im Prinzip ist Tapestry Markup Language eine Erweiterung von XHTML. Wie jede XHTML-Datei muss ein Tapestry-Template ein Wurzelelement ethalten. In diesem Wurzelelement ist der Tapestry-Namensraum zu sehen, der zu Identifikation von Elementen benutzt wird, die im Tapestry-Schema definiert sind.

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
    <head>
        <title>Tapestry 5 Buch</title>
    </head>
    <body>
        ${hello}
    </body>
</html>

Der Ausdruck ${hello} wird als Expansion bezeichnet. Expansions sind eine Tapestry-spezifische Erweiterung von XHTML. Sie können aus Platzhalter innerhalb von Templates verstanden werden, die zur Laufzeit mit Werten von Variablen belegt werden.  In diesem Beispiel greift die Expansion auf die Methode getHello() der Klasse Index zu. Also wird die Expansion mit dem Rückgabewert dieser Methode, nämlich “Hello, World!”, zur Laufzeit belegt. Nun starten Sie die Anwendung und rufen Sie die URL http://localhost:8080/hello-world/index in Ihrem Browser auf. Es sollte die Startseite der Anwendung erscheinen.

Jede Tapestry-Seite ist durch eine URL zugreifbar. Wie in der obigen URL zu sehen ist, wird der Name der Seite in der URL an den Kontextpfad angefügt. Dabei spielt die Klein- oder Großschreibung keine Rolle. Über die URL http://localhost:8080/hello-world/InDeX wird die gleiche Seite erreicht. Übrigens, bei der Seite Index handelt es sich um die Startseite der Anwendung, so dass zum Zugriff auf diese Seite keine Angabe von index benötigt wird. Zum Zugriff auf die Startseite können Sie einfach die URL http://localhost:8080/hello-world/ aufrufen.

Nun lassen Sie uns einen Fehler provozieren, um zu sehen, wie Tapestry Ihre Produktivität durch intelligente Fehlerberichte steigern kann. Ändern Sie dazu im Template den Ausdruck ${hello} in ${hello123} und rufen Sie die Seite erneut auf. Sie werden einen Fehlerbericht wie im folgenden Bild erkennen.  Wie dem Bericht zu entnehmen ist, wird nicht nur die Fehlernachricht dargestellt, sondern auch Hinweise zur Beseitigung des Problems. Die Nachricht besagt, dass im Template eine Expansion ${hello123} benutzt wurde, für die keine Eigenschaft der Seite gefunden werden konnte. Stattdessen wurden die Eigenschaften class, componentResources und hello gefunden. Damit ein Entwickler nicht zwischen dem Browser und seiner IDE umschalten muss, wird das komplette Template der Seite angezeigt. Die Zeile des Templates, die den Fehler verursacht hat, ist farblich hervorgehoben, sodass die Suche nach dem Fehler auf ein Minimum reduziert wird. Es ist offensichtlich, dass der Ausdruck der Expansion von ${hello123} in ${hello} geändert werden muss. Selbstverständlich kann die Darstellung der detailierte Fehlerberichte ausgeschaltet werden, wenn Ihre Anwendung auf dem Produktivsystem installiert wird.

Tapestry-Error-Page

In diesem Blog-Post haben Sie die Grundlagen von Tapestry 5 gelernt und Ihre erste Seite mit dem Framework entwickelt.  Sie haben auch gesehen, wie Tapestry Ihnen bei der Fehlersuche mit intelligenten Fehlerberichten hilft. Für weitere Informationen über Tapestry schauen Sie in meinem Buch nach oder besuchen Sie folgende Seiten:

  • Twitter
  • MisterWong.DE
  • MySpace
  • Google Bookmarks
  • Digg
  • del.icio.us
  • Furl
  • Technorati
  • YahooMyWeb
  • Slashdot
  • Yigg

2 Reaktionen zu “Einführung in Tapestry 5”

  1. Tweets die Addison-Wesley-Blog » Blog Archiv » Einführung in Tapestry 5 erwähnt -- Topsy.com

    [...] Dieser Eintrag wurde auf Twitter von Addison-Wesley , open source erwähnt. open source sagte: Addison-Wesley-Blog » Blog Archiv » Einführung in Tapestry 5: Tapestry ist ein Open-Source-Framework der Apache Software http://url4.eu/w0sq [...]

  2. Beitrag im Blog von Addison-Wesley « Tapestry 5 Blog

    [...] habe eben im Blog von meinem Verlag Addison-Wesley einen Beitrag zu Tapestry gepostet. Es handelt sich um eine kurze Einführung in Tapestry [...]

Einen Kommentar schreiben