MVC framework Tapestry ve verzi 5 doslova chytl druhý dech. Proto jsme pro Vás připravili miniseriál o tomto nástroji. Díl první popisuje framework a podává návod na jednoduchou aplikaci.

V nedaleké minulosti jsem se v rámci mé diplomové práce věnoval také MVC Java frameworku Tapestry 5. Práce s ním mě natolik nadchla, že jsem se na toto téma rozhodl napsat článek. A to například i proto, že neexistuje mnoho čtení o Tapestry 5, obzvlášť ne v češtině.

Povězme si tedy co je to vlastně Tapestry a proč jsem z něho tak nadšen. Tapestry je objektově orientovaný webový rámec nad platformou Java. Oproti ostatním (Spring Web, Struts, apod.) nepoužívá JSP a je postaven přímo nad Servlet API. Má tedy vytvořen vlastní systém šablon. Tyto šablony jsou velice úzce provázány s ovládací třídou, ta se dá označit jako controller. Je to typický komponentový přístupu vývoje webové aplikace. Tento projekt pomalu upadal v zapomnění a nová verze (Tapestry 5) jej oživila a nutno podotknout, že s grácií. Přinesl nám mnoho důvodů k používání, jako například velice jednoduchou konfiguraci, spočívající v anotacích, jednoduchou práci s komponenty, komplexnost frameworku, začlenění moderního přístupu, tedy využívání JS a AJAX funkcí a pro mnoho provozovatelů velice důležitá vlastnost a tou je rychlost.

Začátek práce s tímto frameworkem je velice obtížný, právě kvůli nestandardním řešením a principem přístupu. Stěžuje to i ne příliš kvalitní dokumentace a (oproti například Springu či Struts) málo početná komunita. Ovšem po osvojení principů a naučení práce začne být práce programátora velice zábavná a efektivní, lze využívat mnoho vestavěných funkcí k rychlému vývoji. Programátor se tak nemusí starat o žádné nastavování kolem a věnuje se přímo zadané funkcionalitě.

Je velice obtížné udělat první krok s Tapestry, jen pouhé nastavení knihoven zabere i zkušenějšímu programátorovi dost času. Tento článek by měl v tomto kroku pomoci a tím třeba i rozšířit skupinu uživatelů Tapestry 5. Dále bude popis vytvoření jednoduché aplikace.

Zkusme si tedy testovací příklad na obligátním příkladu „hello world!“.

Příklad bude popsán krok za krokem pomocí vývojového prostředí Eclipse, spouštět budeme na tomcatu 6.0.

Vytvoření nového „Dynamic Web projectu“ v Eclipse. Je nutné mít stažený a nastavený server tomcat 6.0. Ten si zvolíme jako „Target Runtime“, dále „Dynamic Web Module version bude 2.5“. Samozřejmě nastavíme „Project name“ Tapestry, konfiguraci web modulu jsem v příkladu zachoval výchozí.

Stáhneme si Tapestry ze stránek projektu (popisovaná verze je 5.1.0.5) a nahrajeme potřebné knihovny do našeho projektu. Já si vytvořil nový adresář /lib. Knihovny potřebné k spuštění aplikace:

  • antlr-runtime-3.1.1.jar
  • javassist-3.9.0.GA.jar
  • log4j-1.2.14.jar
  • slf4j-api-1.5.2.jar
  • slf4j-log4j12-1.5.2.jar
  • stax2-api-3.0.1.jar
  • stax-api-1.0.1.jar
  • tapestry5-annotations-5.1.0.5.jar
  • tapestry-core-5.1.0.5.jar
  • tapestry-ioc-5.1.0.5.jar
  • woodstox-core-asl-4.0.3.jar

Tyto knihovny samozřejmě musíme řádně zaregistrovat v Eclipse. Tedy vlastnosti projektu. V záložce Java Build Path ->Libraries přidat všechny knihovny a v záložce Java EE Module Dependencies tyto knihovny vybrat.

Vhodné je nastavit log4j. Například takto. Vytvořil jsem si na root projektu složku config, do ní vložil soubor log4j.properties



log4j.rootLogger=INFO,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n 



Adresář config je potřeba nastavit do classpath projektu. To uděláme ve vlastnostech projektu -> Java Build Path -> Source.

Nyní můžeme nastavit web.xml:


< ?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>Tapestry</display>
  
    <context -param>
    	<param -name>tapestry.app-package</param>
    	<param -value>cz.morosystems.tapestry5</param>
    </context>

    <filter>
    	</filter><filter -name>app</filter>
        <filter -class>org.apache.tapestry5.TapestryFilter</filter>
    
	
    <filter -mapping>
    	</filter><filter -name>app</filter>
        <url -pattern>/*</url>
    
  	
</web>



Všimněme si, že nastavujeme pouze cestu k balíčku. Ten nám určuje kde bude Tapestry vyhledávat třídy obsluhující šablony. Tyto třídy budou v podbalíčku pages uvedeného balíčku. V našem případě



cz.morosystems.tapestry5.pages. 


Nyní je vše připraveno pro vytváření šablon a jejích kontrolerů. Předvedeme si jak je samotné tvoření tříd jednoduché.

Nejprve si vytvoříme třídu cz.morosystems.tapestry5.pages.Hello:


package cz.morosystems.tapestry5.pages;

import java.util.Date;


public class Hello {
    
    public String getGreeting() {
        return "Ahoj svete!";
    }
    
    public Date getNow() {
        return new Date();
    }
}



Jak vidíme je to jednoduchá třída, která nemusí nic rozšiřovat. Velice snadná na vytvoření. K tomu v adresáři WebContent vytvoříme šablonu Hello.tml:


<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello world</title>
</head>
<body>
${greeting} <br />
${now}
</body>
</html>


A to je vše, jak prosté. Nyní zbuildujeme aplikaci a spustíme na serveru. Po kliku na http://localhost:8080/Tapestry/hello by se měl objevit očekávaný výsledek. Ten ovšem již ponechám na čtenáři…

Myslím, že na jeden článek je toho zde už dost. Pouze chybí slib, že pro zájemce se tu, jakmile mi časová vytíženost dovolí, objeví pokračování. Kde se dozvíme například jak pracovat s Requestem či se naučíme obsluhovat formulář.

Odkazy