fachhochschule köln institut für informatik university of applied sciences cologne institute of...
TRANSCRIPT
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 1
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
WPF Datenbanken im Internet
Template EngineDieser Vortrag basiert auf folgenden Versionen…
Apache Tomcat 4.1.27Eclipse SDK Version 2.1.2
Java 2 SDK Version 1.4.1.02Velocity Version 1.3.1
Der Vortrag wurde erarbeitet von...
Linke, Stefan (11029675)Riedel, Morris (11027937)
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 2
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Zum Aufbau des Vortrags
• Vorgehen mit Fokus auf „DEMONSTRATIONS“
• Erklärungen (bilden Theorie), sind halt immer notwendig
• Beispiele (bilden Praxis), zu den jeweiligen Abschnitten• „zum Warm werden“ mit steigendem Anspruch
• Übungen (dienen der Festigung), um das Aufgabenblatt nachher schneller zu bearbeiten und besser zu verstehen
• Ziel: etwas von hier „mitnehmen“
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 3
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Zum Inhalt des Vortrags
1. Velocity allgemein (Eigenschaften, Vorteile, Unterschied zu JSP)
2. Wichtige Schritte bei dem Einsatz von Velocity (Initialisierung)
3. Das Context – Objekt (VelocityContext)
4. VTL – Velocity Template Language (Referenzen, Anweisungen)
5. Makros
6. Velocity und Servlets (handleRequest, loadConfiguration)
7. Velocity, Servlets und Datenbankanbindung
8. Velocity Tools
9. Installation – Velocity
10. [Exkurs] Installation – Eclipse und Velocity Plugin
11.Weiterführende Themen und Quellen
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 4
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Was ist Velocity?
• ein Projekt der Apache jakarta-Projektgruppe („open source“)• eine auf java basierende Template – Engine
(Template, deutsch: Vorlage, Schablone)• Zusammenarbeit der Template-Engine mit eigenem Java-Code• gute Alternative zu PHP oder JSP• besitzt mächtige, aber leicht erlernbare Script-Sprachen
Elemente• Klare und einfache Syntax für Designer• Einfaches Programmiermodell für Entwickler• Einfache Integration der Engine in Java-Anwendungen
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 5
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
JSP (Java Server Pages) als Wiederholung (1)
• Ein JSP-Server erstellt aus der JSP-Seite ein Servlet und führt dieses aus
• JSP´s bestehen aus HTML-Elementen mit eingebetteten JSP Anweisungen in Form von Java Code
• Somit keine Trennung zwischen Darstellung und Geschäftslogik• Paralleles Arbeiten von Programmierern und Designern nur sehr
schwer möglich („beide Rollen an nur einem Source“)• Einbettung erfolgt über spezielle Tags, ähnlich wie HTML-
Elemente (<% Javacode %...>)• Aufteilung zwischen Programmierung und Design nur mit
schwierigem Konzept der Tag-Bibliotheken• Somit sind gute Java Kenntnisse für beide Rollen erforderlich
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 6
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
JSP (Java Server Pages) als Wiederholung (2)
• Schleife.jsp ohne Kenntnisse von Java nicht zu verstehen!
<%! int i=0; %><html>
<title> Schleifenausgabe... </title><body>
<h1> Ihre Werte: </h1><% synchronized(this) {
for(; i<100; i++) {for(int j=0; j<100; j++)
System.out.print(".");out.println(i);
} i=0; } %></body>
</html>
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 7
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Vorteile von Velocity
• Strikte Trennung zwischen Darstellung und Geschäftslogik• Webseiten können so durch das MVC-Konzept erstellt werden
(MVC, Model View Controller Entwurfsmuster)• Designer arbeiten an einer gut aussehenden Webseite
(Rolle der Darstellung)• Java-Programmierer erstellen parallel dazu die java-Klassen
(Rolle der Geschäftslogik)• Wichtig: Separierung des Java-Codes von der Webseite• daher wird der Überblick über die Webseite bewahrt, der bspw.
bei JSP verloren ging• Wartung und Entwicklung können unabhängig voneinander
durchgeführt werden
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 8
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity Einsatzgebiete
• Servlet basierte Webprogrammierung durch Ableitung einer Basisklasse (eigentlich Haupteinsatzgebiet)
• Einsatz in normalen Applikationen zur Trennung von Text und Code
• Trennung von dynamischen Datenbankinhalten und ihrer Repräsentation
• Datenformatierung und Präsentationen unabhängig von Code bei fast allen Projekten in der Softwareentwicklung sinnvoll
• Velocity wird als bevorzugte Template-Engine auch oft mit dem Webapplikations-Framework Turbine kombiniert
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 9
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Allgemeine Kenntnisse über Velocity – Übung
Lösung:• Apache jakarta, „open source“, java-basierend• Trennung zwischen Darstellung und Geschäftslogik• Paralleles Arbeiten von Designer und Entwickler• Wartung und Entwicklung unabhängig• In der Webseite im Prinzip kein Java-Code, besser als JSP• Unterstützt das MVC – Entwurfsmuster• leicht zu erlernen und leicht anzuwenden• Einsatzgebiete: Datenformatierung und Servlets
Wer kann nochmal die wichtigsten Punkte von Velocity erklären?
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 10
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Wichtige Schritte bei dem Einsatz von Velocity – Erklärung(1)
Bei einem Einsatz von Velocity werden (fast) immer die gleichen Schritte ausgeführt (Anwendung und bei Servlets z.T. implizit)…
• Velocity wird einmal initialisiertVelocity.init();
• Erzeugung eines Context ObjektesVelocityContext con = new VelocityContext();
• Daten werden dem Context Objekt hinzugefügtcon.put("Testmensch", "name");
• Ein Template (evtl. von vielen) auswählentemp = Velocity.getTemplate("Kunden.vm");
• Zusammenführung von Template und Daten („merge“)StringWriter sw = new StringWriter(); temp.merge(con,sw);
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 11
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Wichtige Schritte bei dem Einsatz von Velocity – Beispiel(1)
public static void main( String[] args ){try { Velocity.init();
} catch (Exception e) {} VelocityContext con = new VelocityContext(); con.put("name", "Testmensch"); Template temp = null; try { temp = Velocity.getTemplate("Kunden.vm"); StringWriter sw = new StringWriter(); temp.merge(con,sw); System.out.println(sw.toString()); } catch (ResourceNotFoundException rnfe ) { System.out.println("- Template wurde nicht gefunden"); } catch (ParseErrorException pee ) { System.out.println("- Template ist fehlerhaft"); } catch (MethodInvocationException mie){ System.out.println("- Template ruft fehlerhaftes auf"); } catch (Exception e) { System.out.println("- Sonstiger Fehler"); } // try } // void main
-> siehe Bsp.-Projekt [Velocity]BspVeloInit
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 12
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Wichtige Schritte bei dem Einsatz von Velocity – Beispiel(2)
• Inhalt des Templates (Kunden.vm)
Guten Tag $name!
Wir freuen uns, dass sie unser Produkt gewählt haben.
• Ausgabe des Beispiels:
Guten Tag Testmensch!
Wir freuen uns, dass sie unser Produkt gewählt haben.
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 13
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Wichtige Schritte bei dem Einsatz von Velocity – Übung
Lösung:• Bei dem Einsatz von Velocity werden (fast) immer die gleichen
Schritte ausgeführt (Anwendung und Servlets)
• Velocity wird einmal initialisiert
• Erzeugung eines Context Objektes
• Daten werden dem Context Objekt hinzugefügt
• Ein Template (evtl. von vielen) auswählen
• Zusammenführung von Template und Daten („merge“) um Output zu generieren
Wer kann die wichtigsten Schritte nochmal kurz wiederholen?
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 14
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Das Context Objekt – Erklärung (1)
• Übernimmt den Transport zwischen Darstellung (Designer) und der Geschäftslogik (Entwickler)
• die in java eingefügten Objekte werden dem Designer als Template Elemente zur Verfügung gestellt
• Das gilt für Eigenschaften und Methoden der eingefügten Objekte
• Der Entwickler kann unterschiedliche Objekte in diesen Context bringen
• Wichtig ist nur die Absprache der jeweiligen Namen der Eigenschaften und Methoden mit dem Designer
• Der Context bildet also quasi die Transport – Schnittstelle zwischen Entwickler und Designer
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 15
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Das Context Objekt – Erklärung (2)
• Das Context – Objekt erinnert stark an eine Hashtable• Methode um Daten in das Context – Objekt zu bringen…
public Object put(String key, Object value);
• Methode um Daten aus dem Context – Objekt zu erhalten…public Object get(String key);
• Primitive Datentypen müssen mit Wrapper-Methoden erstmal in ein Objekttyp umgewandelt werdenInteger i = new Integer(5);put(„Artikelanzahl“,i);
• Zusammenführung von Template und Context durch…public void merge (Context con, StringWriter sw)
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 16
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Das Context Objekt – Beispiel (1)
public static void main( String[] args ){ try { Velocity.init(); } catch (Exception e) {} VelocityContext con = new VelocityContext(); con.put("name", "Testmensch");
System.out.println("- der Name " + con.get("name") + " wurde zugewiesen"); Vector artikel = new Vector(); artikel.addElement( "MS Windows XP Home Edition"); artikel.addElement( "MS Office 2003"); artikel.addElement( "Data Becker: Masterung Office 2003"); con.put("artikel",artikel); Template temp = null; try { temp = Velocity.getTemplate("Kunden.vm"); StringWriter sw = new StringWriter(); temp.merge(con,sw); System.out.println(sw.toString()); } catch (ResourceNotFoundException rnfe ) { System.out.println("- Template wurde nicht gefunden"); } catch (ParseErrorException pee ) { System.out.println("- Template ist fehlerhaft"); } catch (MethodInvocationException mie){ System.out.println("- Template ruft fehlerhaftes auf"); } catch (Exception e) { System.out.println("- Sonstiger Fehler"); } // try } // void main
-> siehe Bsp.-Projekt [Velocity]BspVeloContext
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 17
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Das Context Objekt – Beispiel (2)
• Inhalt des Templates (Kunden.vm)Guten Tag $name!Wir freuen uns, dass Sie unsere Produkte gekauft haben.Folgende Artikel haben Sie bei uns gekauft:$artikel
• Ausgabe des Beispiels:- der Name Testmensch wurde zugewiesenGuten Tag Testmensch!Wir freuen uns, dass Sie unsere Produkte gekauft haben.Folgende Artikel haben Sie bei uns gekauft:[MS Windows XP Home Edition, MS Office 2003, Data
Becker: Masterung Office 2003]
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 18
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Das Context Objekt - Übung
Lösung:
1.) Methode put
2.) Methode get
3.) einer Hashtable aus der java API
4.) Methode merge
1.) Wie können Daten in den Kontext gebracht werden?
2.) Wie können Daten aus dem Kontext gelesen werden?
3.) Das context Objekt ähnelt welchem Java-Objekt besonders?
4.) Wie kommen Template und Context zusammen?
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 19
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Referenzen (1)
• Nach einem $ Zeichen folgt eine Referenz (Bsp.: $name)• Drei Arten von Referenzen
• Variablen• Eigenschaften• Methoden
• Für eine gute Verwendung des Templates ist die Absprache von Designer und Entwickler wichtig, bzgl. der Namensgebung
• Grundsätzlich wird alles erstmal als String-Objekt behandelt
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 20
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Referenzen (2)
Referenzart Variable• $-Zeichen, gefolgt vom Variablennamen („VTL identifier“)• Zur Zeit der Anfrage auf das Template werden dann alle
Vorkommen im Template durch den Wert im Context ersetzt• Bsp.: $name $artikel
Referenzart Eigenschaften• $-Zeichen, gefolgt vom VTL Identifier („erste Ebene“)• danach Punkt und weiterer VTL Identifier („zweite Ebene“)• Zur Zeit der Anfrage auf das Template werden die Werte der
Eigenschaften dann jeweils im Template eingesetzt• Bsp.: $kunde.Name $artikel.Preis
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 21
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Referenzen (3)
Referenzart Methoden• $-Zeichen, gefolgt vom VTL identifier• danach Punkt und dann der „VTL Method Body“• VTL Method Body besteht aus VTL identifier gefolgt von
optionalen Parametern in Klammern• Bsp.: $kunde.getName(), $artikel.setName(„Windows XP“)
• VTL Eigenschaften können als Kürzel für VTL-Methoden verwendet werden
• Gilt nicht bei Methoden mit Parametern• Bsp.: $kunde.Name äquivalent zu $kunde.getName()
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 22
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Referenzen – Beispiel (1)
• Auszug aus dem Sourcecode
/* Context erzeugen */VelocityContext con = new VelocityContext();System.out.println("- neuer Kontext wurde angelegt");
/* Kunde anlegen */Kunde kundenobjekt = new Kunde();kundenobjekt.setName("Testmensch");
/* Context bearbeiten */ con.put("kunde", kundenobjekt);
// hier der Unterschied, wieviel Arbeit die Ausgabe in Java machen würde, Stichwort „casten“!System.out.println("- der Kunde " + ((Kunde)con.get("kunde")).getName() + " wurde zugewiesen");
/* auch einen Vektor kann man reingeben */Vector artikel = new Vector();artikel.addElement( "MS Windows XP Home Edition");artikel.addElement( "MS Office 2003");artikel.addElement( "Data Becker: Masterung Office 2003");
/* gekaufte artikel werden übergeben */con.put("artikel",artikel);
-> siehe Bsp.-Projekt [Velocity]BspVeloReferenzen
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 23
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Referenzen – Beispiel (2)
• Einführung einer trivialen Klasse Kunde in Bean-Notation• Inhalt des Templates (Kunden.vm)
Guten Tag $kunde.Name!Der Kunde $kunde.getName() hat folgendes bei uns gekauft:$artikelSie heißen nicht $kunde !
• Ausgabe des Beispiels:Guten Tag Testmensch!Der Kunde Testmensch hat folgendes bei uns gekauft:[MS Windows XP Home Edition, MS Office 2003, Data Becker:
Masterung Office 2003]Sie heißen nicht Kunde@a470b8 !
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 24
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Referenzen - Übung
Lösung:
1.) Referenzen beginnen mit $ (und man erhält etwas)
2.) Es gibt keinen Unterschied, beim Aufruf von $kunde.Name sucht Velocity automatisch nach $kunde.getName() oder $kunde.getname() und ruft die Methode auf
3.) Variablen, Eigenschaften, Methoden
1.) Mit welchem Zeichen beginnt eine Referenz?
2.) Wodrin liegt der Unterschied beim Aufruf $kunde.name und
$kunde.getName() ?
3.) Welche Arten von Referenzen gibt es?
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 25
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen (1)
• Jede Anweisung hat die Form #Befehl (Bsp.: #set)• Referenzen dienen den dynamische Inhalten von Texten und…• Anweisungen können mit dem Output der Referenzen arbeiten• dadurch kann noch detaillierter gearbeitet werden• es gibt einen festgelegten Satz an Anweisungen
• Kommentare• Logische Operatoren• Bedingungen• Schleifen• Wertzuweisung• Externe Dateien einbinden
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 26
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen (2)
Kommentare• erscheint nicht im Output der Template Engine• hilft der Übersicht im Template• Bsp.: ## einzeiliger Kommentar
#* Mehrzeiliger Kommentar *#
Logische Operatoren• Aus Java bekannt: &&(und), ||(oder) und !(nicht)• dadurch lassen sich nahezu alle Vergleiche formulieren• nützlich in Verbindung mit Bedingungen…• Bsp.: $anzahl ==1 && $max == 2
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 27
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen (3)
Bedingungen• Bekannte Bedingungen mit #if, #elseif und #else• Abschluss eines Bedingungsblocks mit #end• Vergleiche mit üblichen Zeichen ==, < und >• Bsp.: #if ( $anzahl > 30 )
Kunde ist Großkunde#else Kunde ist Normalkunde#end
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 28
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen (4)
Schleifen• nur eine Schleifenvariante, die #foreach Schleife• Abschluss eines Schleifenblocks mit #end• so kann man bspw. die Datensätze einer Datenbankabfrage
darstellen und korrekt formatieren• Bsp.: Folgende Produkte wurden gekauft…
#foreach ( $artikel in $gekaufteartikel ) $velocityCount . Artikel $artikel#end
• Die Variable $gekaufteartikel kann einen Vektor, eine Hashtable, ein Array, Iterator, Enumeration oder eine Collection enthalten
• $velocityCount enthält die Schleifeniterationszahl (1…n)
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 29
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen (5)
Wertzuweisung• Mit #set kann man Referenzen Werte zuweisen, Bsp.
#set ( $kunde.Name = „Schmitz“)
• Auch das Resultat von Eigenschaften oder Methoden kann bei set verwendet werden, Bsp#set ( $kunde.Name = $anmeldung.Name )
• Auch eine Zuweisung von Arraytypen ist möglich, Bsp.#set( $kunde.gekaufteartikel = [„Borland Delphi 8“,
“MS Windows 2000“, “MS Office 2003“])
• Im Prinzip ähnelt #set einer einfachen Zuweisung in Java nur mit dem Mantel #set( … )
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 30
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen (6)
Externe Dateien einbinden• Inhalt ganzer Dateien in eine Seite einfügen mit #include• Aus Sicherheitsgründen dürfen diese Seiten nur im selben
Verzeichnis wie das Template selbst sein• Bsp.: #include („artikel_borland_text.txt“)
• Verwendung von #parse wenn die Datei VTL enthält• Bsp.: #parse („artikel_borland_text_formatiert.txt“)
Hilfsanweisung („Debugmethode“)• Die Hilfsanweisung #stop ist nützlich bei der Fehlersuche• die Ausführung der Template Engine wird unterbrochen
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 31
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language Anweisungen – Beispiel (1)
• Auszug aus dem Sourcecode…/* Kunde anlegen */Kunde kundenobjekt = new Kunde();kundenobjekt.setName("Schmitz");kundenobjekt.setGeschlecht("m"); /* Context bearbeiten */ con.put("kunde", kundenobjekt);System.out.println("- der Kunde " + ((Kunde)con.get("kunde")).getName()
" wurde zugewiesen");/* auch einen Vektor kann man reingeben */Vector gekartikel = new Vector();gekartikel.addElement( "MS Windows XP Home Edition");gekartikel.addElement( "Data Becker: Masterung Office 2003"); gekartikel.addElement( "MS Office 2003"); /* gekaufte artikel werden übergeben */con.put("gekaufteartikel",gekartikel);
-> siehe Bsp.-Projekt [Velocity]BspVeloAnweisungen
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 32
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language Anweisungen – Beispiel (2)
• triviale Klasse Kunde wurde ein wenig erweitert• Inhalt des Templates (Kunden.vm)
#if ($kunde.Geschlecht == "m") Guten Tag Herr $kunde.Name!#elseif ($kunde.Geschlecht == "w")Guten Tag Frau $kunde.Name! #elseGuten Tag Firma $kunde.Name!#endDer Kunde $kunde.getName() hat folgendes bei uns gekauft:#foreach ( $artikel in $gekaufteartikel )$velocityCount. $artikel## bei Office gibt es einen Text#if ($artikel == "MS Office 2003")Beschreibung:#include("art_Office_text.txt")#end ##if#set ($kunde.gekArtikelAnzahl = $kunde.gekArtikelAnzahl+1 )#end ##foreachDer Kunde kaufte bis jetzt $kunde.gekArtikelAnzahl Artikel.#stop[Intern]Seine Zahlungsmoral ist sehr schlecht!
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 33
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language Anweisungen – Beispiel (2)
• Ausgabe des Beispiels:Guten Tag Herr Schmitz!Der Kunde Schmitz hat folgendes bei uns gekauft:1. MS Windows XP Home Edition2. Data Becker: Masterung Office 20033. MS Office 2003
Beschreibung:MS Office 2003 ist ein Produkt von unglaublicherVielseitigkeit und durch open source Projekte einfachnicht zu ersetzen. Es vereint Komplexität mit einfacherHandhabung und stabiler Lauffähigkeit, wenn nicht geradedie Söhne der Chefs als Administratoren denken sie könntenmal eben einen Commerce Server aufsetzen.
Der Kunde kaufte bis jetzt 3 Artikel.
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 34
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Anweisungen - Übung
Lösung:
1.) Referenzen beginnen mit $ und man erhält etwas
Anweisungen beginnen mit # und man „macht“ etwas
2.) Befehl #set( … )
3.) #include fügt Texte ohne Berücksichtigung der VTL ein, mit #parse werden VTL-Elemente dagegen berücksichtigt
1.) Worin liegt der Unterschied zwischen Referenzen und Anweisungen
2.) Wie lautet der Befehl um Referenzen Werte zuzuweisen?
3.) Was ist der Unterschied zwischen #include und #parse?
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 35
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Makros (1)
Ein Makro erlaubt es einem Programmierer ein Stück Code,
wiederzuverwenden.• Da der Aufbau der einzelnen Teile einer Webseite sich
meistens ähnelt, kann dies sehr nützlich sein. Ein Makro unterscheidet sich von einer Funktion dadurch, dass es keine Rückgabewerte liefern kann.
Die Definition eines Makros ist sehr einfach:
#macro( Makroname )
Hallo Welt.
#end
Der Aufruf ebenso:#Makroname()
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 36
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
VTL – Velocity Template Language – Makros (2)
Nun die Definition eines Makro mit Übergabeparametern:#macro( erstelleWarenliste $farbe $produktliste )<table>
#foreach( $produkt in $produktliste )<tr><td bgcolor=$farbe> $produkt </td></tr>#end
</table>#end
Der Aufruf mit Übergabeparametern:#set( $gekaufteProdukte = ["MS Office 2002", "Windows XP", "SobigF"] )#set( $farbe = "blue" )#createTable( $farbe, $gekaufteProdukte )
Ausgabe:<table><tr><td color="blue">MS Office 2002</td></tr><tr><td color="blue">Windows XP</td></tr><tr><td color="blue">SobigF</td></tr></table>
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 37
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Erklärung
• Haupteinsatzgebiet von Velocity ist die java-Servlet Programmierung• Vorteil der Trennung von Präsentationsschicht und Programmschicht
kommt hier voll zur Geltung• Velocity Distribution stellt eine Servlet Basisklasse zur Verfügung
org.apache.velocity.servlet.VelocityServlet
• Bei Ableitung muss nur eine Methode implementiert werdenpublic Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context context);
• Wichtige Unterschiede zur Applikation…• Erzeugung des Kontext-Objekts schon in Basisklasse• Aufruf von merge() für das Template in Basisklasse
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 38
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Beispiel (1)
• Unsere Methode handleRequest(…) aus BspVeloServlet.java
protected Template handleRequest( HttpServletRequest request,
HttpServletResponse resonse,Context context)
throws Exception {
/* Kunde anlegen */ Kunde kundenobjekt = new Kunde();kundenobjekt.setName("Schmitz");kundenobjekt.setGeschlecht("m"); /* Context bearbeiten */ context.put("kunde", kundenobjekt); /* auch einen Vektor kann man reingeben */ Vector gekartikel = new Vector();gekartikel.addElement( "MS Windows XP Home Edition");gekartikel.addElement( "Data Becker: Masterung Office 2003"); gekartikel.addElement( "MS Office 2003"); /* gekaufte artikel werden übergeben */ context.put("gekaufteartikel",gekartikel);
-> weiter nächste Folie…
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 39
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Beispiel (2)
• Fortsetzung Methode handleRequest(…) aus BspVeloServlet.java
Template temp = null;
try {
/* template */
temp = getTemplate("Kunden.vm");
} catch (ResourceNotFoundException rnfe ) {
System.out.println("- Template wurde nicht gefunden");
} catch (ParseErrorException pee ) {
System.out.println("- Template ist fehlerhaft");
} catch (MethodInvocationException mie){
System.out.println("- Template ruft fehlerhaftes auf");
} catch (Exception e) {
System.out.println("- Sonstiger Fehler");
} // try
return temp;
}
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 40
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Beispiel (3)
• Die Template sollten wegen der Übersicht in ein eigenes Verzeichnis /Templates
• dazu muss eine Methode in BspVeloServlet.java wie folgt überschrieben werden…
protected Properties loadConfiguration(ServletConfig config )throws IOException, FileNotFoundException{ Properties p = new Properties(); String path = config.getServletContext().getRealPath("/templates"); if (path == null) { path = "/templates"; } p.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH, path ); p.setProperty( "runtime.log", path + "velocity.log" ); return p;}
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 41
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Beispiel (4)
• das Template (Kunden.vm) muss nun auf HTML-Basis gebracht werden
• Teil 1/2<html><head> <title>Artikel des Kunden
$kunde.Name</title></head><body><b>#if ($kunde.Geschlecht == "m")
Guten Tag Herr $kunde.Name!#elseif ($kunde.Geschlecht == "w")
Guten Tag Frau $kunde.Name! #else
Guten Tag Firma $kunde.Name!#end</b><br/>
• Teil 2/2
Der Kunde $kunde.getName() hat folgendes bei
uns gekauft:<br/><br/>
#foreach ( $artikel in $gekaufteartikel )
$velocityCount. $artikel<br/>
## bei Office gibt es einen Text
#if ($artikel == "MS Office 2003")
Beschreibung:
#include("art_Office_text.txt")
#end ##if
#set ($kunde.gekArtikelAnzahl = $kunde.gekArtikelAnzahl+1 )
#end ##foreach
<br/></br>
Der Kunde kaufte bis jetzt <i><b>$kunde.gekArtikelAnzahl</b></i> Artikel.<br/>
#stop
Seine Zahlungsmoral ist sehr schlecht!
</body>
</html>
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 42
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Beispiel (5)
• Wir benötigen dazu noch einen Servlet/JSP Container• Wir verwenden hier den Apache Jakarta Tomcat • Wir legen unter webapp im Tomcat Verzeichnis die übliche Verzeichnisstruktur an…
[Velocity]BspVeloServlet[Velocity]BspVeloServlet\Templates[Velocity]BspVeloServlet\WEB-INF[Velocity]BspVeloServlet\WEB-INF\lib[Velocity]BspVeloServlet\WEB-INF\classes
• kunden.vm in [Velocity]BspVeloServlet\Templates• art_Office_text.txt in [Velocity]BspVeloServlet\Templates• Kunde.class und BspVeloServlet.class in
[Velocity]BspVeloServlet\WEB-INF\classes
• das velocity-1.3.1.jar und das velocity-dep-1.3.1.jar in[Velocity]BspVeloServlet\WEB-INF\lib
• Aufruf mithttp://localhost:8080/[Velocity]BspVeloServlet/servlet/BspVeloServlet
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 43
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity und Servlets – Beispiel (6)
• In einem Browser sieht die Ausgabe nun folgendermaßen aus
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 44
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung – Beispiel (1)
• Wir verwenden die Datenbank Interbase und legen eine Kunden-Datenbank („kunden.gdb“) an mit folgenden Tabellen...
create table Kunden( IDInteger not NULL, Namevarchar(80), Geschlechtchar(1) not NULL, primary key(ID));create table Artikel( IDInteger not NULL, Namevarchar(100), primary key(ID));create table KD_ART( KD_IDInteger not NULL, ART_IDInteger not NULL, AnzahlInteger, primary key(KD_ID,ART_ID), foreign key (KD_ID) references Kunden on delete cascade, foreign key (ART_ID) references Artikel on delete cascade );
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 45
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung - Beispiel (2)
• Füllen der Tabellen mit einigen Daten
insert into Kunden values (1,"Schmitz",'m');insert into Kunden values (2,"Kleine",'w');
insert into Artikel values (1,"Borland Delphi 8");insert into Artikel values (2,"MS Windows 98");insert into Artikel values (3,"MS Windows 2000");insert into Artikel values (4,"MS Windows NT 4");insert into Artikel values (5,"MS Windows XP Home Edition");insert into Artikel values (6,"MS Windows XP Professional");
# Herr Schmitz kaufteinsert into KD_ART values (1,1,1);insert into KD_ART values (1,3,1);insert into KD_ART values (1,6,2);
# Frau Kleine kaufteinsert into KD_ART values (2,2,1);insert into KD_ART values (2,4,4);
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 46
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung - Beispiel (3)
• Aufbau einer Datenverbindung wie üblich mit JDBC• Hier jedoch mal keine Oracle Datenbank, sondern der Interclient Treiber
für eine Interbase Datenbank• import java.sql.*; nicht vergessen
/* Artikel werden nun auch aus der Datenbank geholt *//* Datenbankanbindung Interbase */String url =
"jdbc:interbase://localhost/C:/SQLDBS/Kunden.GDB";try { Class.forName("interbase.interclient.Driver");} catch(Exception e) { System.out.println("Klasse nicht gefunden");}
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 47
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung - Beispiel (4)
• Verbindung zur Datenbank mit Connection Objekt und Verwendung von Statement und ResultSet – Objekten um den Vector gekartikel zu füllen
try { Connection conn = DriverManager.getConnection(url,"sysdba", "masterkey"); String sqlString = "select * from Artikel,KD_ART " + "where (KD_ART.KD_ID=1) and" + "(KD_ART.ART_ID=Artikel.ID);"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sqlString); /* Iteration durch die Datensätze */ while (rs.next()) {gekartikel.addElement( rs.getString(2)); } rs.close(); stmt.close();} catch( SQLException sqle ) { System.out.println("Keine Verbindung oder SQL Fehler");}
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 48
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung - Beispiel (5)
• Nun Übergabe des Vektors an den Context und Laden des Templates...
/* gekaufte artikel werden übergeben */context.put("gekaufteartikel",gekartikel);
Template temp = null;try { /* template */ temp = getTemplate("Kunden.vm"); } catch (ResourceNotFoundException rnfe ) { System.out.println("- Template wurde nicht gefunden"); } catch (ParseErrorException pee ) { System.out.println("- Template ist fehlerhaft"); } catch (MethodInvocationException mie){ System.out.println("- Template ruft fehlerhaftes auf"); } catch (Exception e) { System.out.println("- Sonstiger Fehler"); } // try
return temp;
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 49
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung - Beispiel (6)
• Aufruf mithttp://localhost:8080/[Velocity]BspVeloDBServlet/servlet/BspVeloDBServlet
• In einem Browser sieht die Ausgabe nun folgendermaßen aus
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 50
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity, Servlets und Datenbankanbindung - Übung
Lösung:
1.) org.apache.velocity.servlet.VelocityServlet
2.) public Template handleRequest(HttpServletRequest request, HttpServletResponse
response, Context context);
3.) Unterschiede...
• Erzeugung des Kontext-Objekts schon in Basisklasse
• Aufruf von merge() für das Template in Basisklasse
1.) Wie heisst die Servlet-Basisklasse?
2.) Welche Methode muß zwingend überschrieben werden?
3.) Was ist der Unterschied bei der Verwendung des Servlets zu einer Applikation mit Velocity?
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 51
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity-Tools (1)
Die VelocityTools sind ein Komponenten-Bundle aus verschiedenen
Subprojekten von Velocity, deren erklärtes Ziel es ist Werkzeuge
und Infrastruktur zur Verfügung zu stellen um mit der Velocity-
Engine Web-und normale Applikationen zu erstellen.• Generic Tools
ist eine Sammlung verschiedener nützlicher Klassen, die zu einem jeden Kontext hinzugefügt werden können.
• VelocityView enthält ein standalone servlet (VelocityViewServlet) welches templates für Web-Applikationen rendern kann. Ausserdem ist ein Toolbox Manager enthalten, welcher Templates Daten zur Verfügung stellen kann.
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 52
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Velocity-Tools (2)
• VelocityStruts Eine Zusammenstellung von Klassen um Velocitys Template Engine zur Visualisierung von Web-Applikationen, die mit dem Jakarta Struts Framework laufen.
• BeispielapplikationenDie Verwendung aller oben genannten Klassen wird gezeigt und zu jedem Beispiel wird der entsprechende JSP-Code mitgeliefert um einen Vergleich zu ermöglichen.
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 53
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Installation – Velocity
• Webseite http://jakarta.apache.org/velocity• Auf der Velocity-Seite Download wählen…• Velocity-1.3.1.zip (~ 5,46 MB) („current release“)• umfasst mehrere Dateien• Wichtig jedoch sind die beiden jars
velocity-1.3.1.jar und velocity-dep-1.3.1.jar• Bei Servlets sollten diese in das Verzeichnis \lib der jeweiligen
Anwendung kopiert werden• Bei normalen Anwendungen sollten diese wie gewohnt
zugänglich gemacht werden (Stichwort: Classpath)
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 54
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
[Exkurs] Installation – Eclipse und Velocity Plugin
• Webseite http://www.eclipse.org• Dort kann das aktuelle Release von Eclipse kostenlos
heruntergeladen werden, zur Zeit Version 2.1.2• eclipse-SDK-2.1.2-win32.zip (~ 62,6 MB) („Latest releases“)• Danach einfach unter Programme entpacken• mit eclipse.exe wird Eclipse gestartet• Velocity-Plugin für Eclipse von Webseite
http://veloedit.sourceforge.net/ herunterladen• org.vaulttec.velocity.ui_x.x.x.zip und
org.apache.velocity_x.x.x.zip im VerzeichnisEclipseHome/Plugins entpacken
• Eclipse starten, Dateien *.vm nun mit Velocity Editor
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 55
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Weiterführende Themen
Singleton und das separate Instanzmodell• Zwei Optionen um Velocity zu benutzen• Singleton Modell: nur eine Instanz der Velocity Engine• Separate Instanzmodell: Möglichkeit bel. Viele Instanzen von
Velocity in einer JVM gleichzeitig zu konfigurieren und zu benutzen
Einstellungsdatei Velocity.properties• Viele Einstellungen, bspw. der Beginn des
Schleifeniterationszählers $velocityCount bei 0 oder bei 1• außerdem Pfade für Ressourcen zu Servlets hinterlegbar
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 56
Fachhochschule Köln Institut für Informatik
University of Applied Sciences Cologne Institute of Computer Science
Campus Gummersbach
Quellen
Webseite von Eclipse
http://www.eclipse.org
Webseite des Velocity-Plugins für Eclipse
http://veloedit.sourceforge.net/
Webseite von Sun (wegen Java)
http://java.sun.com
Buch – Portale und Webapplikationen mit Apache Frameworks
ISBN 3-935042 – 36 – 1 (Fachhochschulbibliothek)
Apache Jakarta Project
http://www.jakarta.apache.org/