Artikel

 
Februar 2010 | Artikel

Tapestry 5: Eine Einführung

(Link zum Artikel: http://www.it-republik.de/jaxenter/artikel/2891)

Das Web-Framework unter der Lupe

Text: Igor Drobiazko
Apache Tapestry ist ein Open-Source-Framework zur Entwicklung von dynamischen und skalierbaren Webanwendungen in Java. Die wichtigsten Merkmale von Tapestry sind prägnante Templates, eine minimale Menge von Java-Code und ein hohes Maß an Produktivität. Durch Best Practices wie RESTful URLs, Convention over Configuration und DRY (Don't Repeat Yourself) vereinfacht Tapestry die Webentwicklung unter Java.
Teil 1   Teil 2   

Zur Installation Ihrer ersten Tapestry-Anwendung laden Sie das Archiv helloworld.war herunter und importieren Sie es in die IDE 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:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd">
  4. <web-app>
  5. <display-name>Tapestry 5 Buch</display-name>
  6. <context-param>
  7. <param-name>tapestry.app-package</param-name>
  8. <param-value>de.t5book</param-value>
  9. </context-param>
  10. <filter>
  11. <filter-name>app</filter-name>
  12. <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
  13. </filter>
  14. <filter-mapping>
  15. <filter-name>app</filter-name>
  16. <url-pattern>/*</url-pattern>
  17. </filter-mapping>
  18. </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 sucht Tapestry nach Seiten und Komponenten in vordefinierten Unterpaketen.

Ihre erste Tapestry-Anwendung

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 sucht Tapestry nach Klassen von Seiten im Unterpaket pages. In diesem Beispiel ist de.t5book als Wurzelpaket der Anwendung konfiguriert. Also sucht 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:

  1. public class Index {
  2. public String getHello() {
  3. return "Hello, World!";
  4. }
  5. }

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 sucht Tapestry für die Seite Index nach einer Datei Index.tml. Die Endung .tml steht für die Tapestry Markup Language (TML). Im Prinzip ist die Tapestry Markup Language eine Erweiterung von XHTML. Wie jede XHTML-Datei muss ein Tapestry Template ein Wurzelelement enthalten. In diesem Wurzelelement ist der Tapestry-Namensraum zu sehen, der zu Identifikation von Elementen benutzt wird, die im Tapestry-Schema definiert sind:

  1. <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
  2. <head>
  3. <title>Tapestry 5 Buch</title>
  4. </head>
  5. <body>
  6. ${hello}
  7. </body>
  8. </html>

Der Ausdruck $ {hello} wird als Expansion bezeichnet. Expansions sind eine Tapestry-spezifische Erweiterung von XHTML. Sie können als 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 den URL http://localhost:8080/hello-world/index in Ihrem Browser auf. Es sollte die Startseite der Anwendung erscheinen.

Teil 1   Teil 2   

Anzeige

Kommentare


Anzeige

zurück zum Seitenanfang