Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im."—  Präsentation transkript:

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

2 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 2 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

3 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 3 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

4 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 4 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

5 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 5 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 ( ) Aufteilung zwischen Programmierung und Design nur mit schwierigem Konzept der Tag-Bibliotheken Somit sind gute Java Kenntnisse für beide Rollen erforderlich

6 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 6 JSP (Java Server Pages) als Wiederholung (2) Schleife.jsp ohne Kenntnisse von Java nicht zu verstehen! Schleifenausgabe... Ihre Werte: <% synchronized(this) { for(; i<100; i++) { for(int j=0; j<100; j++) System.out.print("."); out.println(i); } i=0; } %>

7 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 7 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

8 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 8 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

9 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 9 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?

10 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 10 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 initialisiert Velocity.init(); Erzeugung eines Context Objektes VelocityContext con = new VelocityContext(); Daten werden dem Context Objekt hinzugefügt con.put("Testmensch", "name"); Ein Template (evtl. von vielen) auswählen temp = Velocity.getTemplate("Kunden.vm"); Zusammenführung von Template und Daten (merge) StringWriter sw = new StringWriter(); temp.merge(con,sw);

11 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 11 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

12 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 12 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.

13 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 13 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?

14 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 14 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

15 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 15 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 werden Integer i = new Integer(5); put(Artikelanzahl,i); Zusammenführung von Template und Context durch… public void merge (Context con, StringWriter sw)

16 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 16 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

17 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 17 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 zugewiesen Guten 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]

18 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 18 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?

19 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 19 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

20 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 20 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

21 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 21 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()

22 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 22 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

23 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 23 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: $artikel Sie 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 !

24 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 24 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?

25 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 25 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

26 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 26 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

27 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 27 VTL – Velocity Template Language – Anweisungen (3) Bedingungen Bekannte Bedingungen mit #if, #elseif und #else Abschluss eines Bedingungsblocks mit #end Vergleiche mit üblichen Zeichen ==, Bsp.: #if ( $anzahl > 30 ) Kunde ist Großkunde #else Kunde ist Normalkunde #end

28 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 28 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)

29 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 29 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( … )

30 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 30 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

31 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 31 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

32 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 32 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! #else Guten Tag Firma $kunde.Name! #end Der 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 ##foreach Der Kunde kaufte bis jetzt $kunde.gekArtikelAnzahl Artikel. #stop [Intern]Seine Zahlungsmoral ist sehr schlecht!

33 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 33 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 Edition 2. Data Becker: Masterung Office MS Office 2003 Beschreibung: MS Office 2003 ist ein Produkt von unglaublicher Vielseitigkeit und durch open source Projekte einfach nicht zu ersetzen. Es vereint Komplexität mit einfacher Handhabung und stabiler Lauffähigkeit, wenn nicht gerade die Söhne der Chefs als Administratoren denken sie könnten mal eben einen Commerce Server aufsetzen. Der Kunde kaufte bis jetzt 3 Artikel.

34 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 34 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 ?

35 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 35 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()

36 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 36 VTL – Velocity Template Language – Makros (2) Nun die Definition eines Makro mit Übergabeparametern: #macro( erstelleWarenliste $farbe $produktliste ) #foreach( $produkt in $produktliste ) $produkt #end #end Der Aufruf mit Übergabeparametern: #set( $gekaufteProdukte = ["MS Office 2002", "Windows XP", "SobigF"] ) #set( $farbe = "blue" ) #createTable( $farbe, $gekaufteProdukte ) Ausgabe: MS Office 2002 Windows XP SobigF

37 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 37 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 werden public 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

38 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 38 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…

39 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 39 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; }

40 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 40 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; }

41 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 41 Velocity und Servlets – Beispiel (4) das Template (Kunden.vm) muss nun auf HTML-Basis gebracht werden Teil 1/2 Artikel des Kunden $kunde.Name #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 Teil 2/2 Der 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 ##foreach Der Kunde kaufte bis jetzt $kunde.gekArtikelAnzahl Artikel. #stop Seine Zahlungsmoral ist sehr schlecht!

42 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 42 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 jar und das velocity-dep jar in [Velocity]BspVeloServlet\WEB-INF\lib Aufruf mit

43 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 43 Velocity und Servlets – Beispiel (6) In einem Browser sieht die Ausgabe nun folgendermaßen aus

44 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 44 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 );

45 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 45 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 kaufte insert 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 kaufte insert into KD_ART values (2,2,1); insert into KD_ART values (2,4,4);

46 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 46 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"); }

47 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 47 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"); }

48 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 48 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;

49 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 49 Velocity, Servlets und Datenbankanbindung - Beispiel (6) Aufruf mit let/BspVeloDBServlet In einem Browser sieht die Ausgabe nun folgendermaßen aus

50 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 50 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?

51 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 51 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.

52 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 52 Velocity-Tools (2) VelocityStruts Eine Zusammenstellung von Klassen um Velocitys Template Engine zur Visualisierung von Web-Applikationen, die mit dem Jakarta Struts Framework laufen. Beispielapplikationen Die Verwendung aller oben genannten Klassen wird gezeigt und zu jedem Beispiel wird der entsprechende JSP-Code mitgeliefert um einen Vergleich zu ermöglichen.

53 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 53 Installation – Velocity Webseite Auf der Velocity-Seite Download wählen… Velocity zip (~ 5,46 MB) (current release) umfasst mehrere Dateien Wichtig jedoch sind die beiden jars velocity jar und velocity-dep 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)

54 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 54 [Exkurs] Installation – Eclipse und Velocity Plugin Webseite Dort kann das aktuelle Release von Eclipse kostenlos heruntergeladen werden, zur Zeit Version eclipse-SDK 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 herunterladen org.vaulttec.velocity.ui_x.x.x.zip und org.apache.velocity_x.x.x.zip im Verzeichnis EclipseHome/Plugins entpacken Eclipse starten, Dateien *.vm nun mit Velocity Editor

55 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 55 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

56 Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004 Seite 56 Quellen Webseite von Eclipse Webseite des Velocity-Plugins für Eclipse Webseite von Sun (wegen Java) Buch – Portale und Webapplikationen mit Apache Frameworks ISBN – 36 – 1 (Fachhochschulbibliothek) Apache Jakarta Project


Herunterladen ppt "Fachhochschule Köln Institut für Informatik University of Applied Sciences Cologne Institute of Computer Science Campus Gummersbach WPF Datenbanken im."

Ähnliche Präsentationen


Google-Anzeigen