fachhochschule köln institut für informatik university of applied sciences cologne institute of...

56
WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 1 Fachhochschule Köln Institut für Inform University of Applied Sciences Cologne Institute o Campus Gummersbach WPF Datenbanken im Internet Template Engine Dieser Vortrag basiert auf folgenden Versionen… Apache Tomcat 4.1.27 Eclipse SDK Version 2.1.2 Java 2 SDK Version 1.4.1.02 Velocity Version 1.3.1 Der Vortrag wurde erarbeitet von... Linke, Stefan (11029675) Riedel, Morris (11027937)

Upload: jirgen-blucher

Post on 05-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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)

Page 2: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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“

Page 3: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 4: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 5: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 6: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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>

Page 7: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 8: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 9: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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?

Page 10: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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);

Page 11: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 12: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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.

Page 13: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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?

Page 14: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 15: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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)

Page 16: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 17: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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]

Page 18: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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?

Page 19: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 20: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 21: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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()

Page 22: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 23: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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 !

Page 24: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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?

Page 25: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 26: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 27: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 28: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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)

Page 29: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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( … )

Page 30: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 31: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 32: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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!

Page 33: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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.

Page 34: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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?

Page 35: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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()

Page 36: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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>

Page 37: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 38: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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…

Page 39: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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;

}

Page 40: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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;}

Page 41: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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>

Page 42: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 43: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 44: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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 );

Page 45: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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);

Page 46: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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");}

Page 47: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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");}

Page 48: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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;

Page 49: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 50: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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?

Page 51: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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.

Page 52: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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.

Page 53: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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)

Page 54: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 55: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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

Page 56: Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im

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/