1 / 56

WPF Datenbanken im Internet

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

neka
Download Presentation

WPF Datenbanken im Internet

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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) WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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“ WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  3. Zum Inhalt des Vortrags • Velocity allgemein (Eigenschaften, Vorteile, Unterschied zu JSP) • Wichtige Schritte bei dem Einsatz von Velocity (Initialisierung) • Das Context – Objekt (VelocityContext) • VTL – Velocity Template Language (Referenzen, Anweisungen) • Makros • Velocity und Servlets (handleRequest, loadConfiguration) • Velocity, Servlets und Datenbankanbindung • Velocity Tools • Installation – Velocity • [Exkurs] Installation – Eclipse und Velocity Plugin • Weiterführende Themen und Quellen WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 (<% Javacode %...>) • Aufteilung zwischen Programmierung und Design nur mit schwierigem Konzept der Tag-Bibliotheken • Somit sind gute Java Kenntnisse für beide Rollen erforderlich WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  6. JSP (Java Server Pages) als Wiederholung (2) • Schleife.jsp ohne Kenntnisse von Java nicht zu verstehen! <%! int i=0; %> <html> <title> Schleifenausgabe... </title> <body> <h1> Ihre Werte: </h1> <% synchronized(this) { for(; i<100; i++) { for(int j=0; j<100; j++) System.out.print("."); out.println(i); } i=0; } %> </body> </html> WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  9. Allgemeine Kenntnisse über Velocity – Übung Wer kann nochmal die wichtigsten Punkte von Velocity erklären? 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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 initialisiertVelocity.init(); • Erzeugung eines Context ObjektesVelocityContext con = new VelocityContext(); • Daten werden dem Context Objekt hinzugefügtcon.put("Testmensch", "name"); • Ein Template (evtl. von vielen) auswählentemp = Velocity.getTemplate("Kunden.vm"); • Zusammenführung von Template und Daten („merge“)StringWriter sw = new StringWriter(); temp.merge(con,sw); WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  11. Wichtige Schritte bei dem Einsatz von Velocity – Beispiel(1) publicstaticvoid main( String[] args ) { try { Velocity.init(); } catch (Exception e) {} VelocityContext con = new VelocityContext(); con.put("name", "Testmensch"); Template temp = null; try { temp = Velocity.getTemplate("Kunden.vm"); StringWriter sw = new StringWriter(); temp.merge(con,sw); System.out.println(sw.toString()); } catch (ResourceNotFoundException rnfe ) { System.out.println("- Template wurde nicht gefunden"); } catch (ParseErrorException pee ) { System.out.println("- Template ist fehlerhaft"); } catch (MethodInvocationException mie){ System.out.println("- Template ruft fehlerhaftes auf"); } catch (Exception e) { System.out.println("- Sonstiger Fehler"); } // try } // void main -> siehe Bsp.-Projekt [Velocity]BspVeloInit WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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. WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  13. Wichtige Schritte bei dem Einsatz von Velocity – Übung Wer kann die wichtigsten Schritte nochmal kurz wiederholen? 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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 werdenInteger i = new Integer(5);put(„Artikelanzahl“,i); • Zusammenführung von Template und Context durch…public void merge (Context con, StringWriter sw) WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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] WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  18. Das Context Objekt - Übung 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? Lösung: 1.) Methode put 2.) Methode get 3.) einer Hashtable aus der java API 4.) Methode merge WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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() WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 Kunde@a470b8 ! WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  24. VTL – Velocity Template Language – Referenzen - Übung 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? 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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  27. VTL – Velocity Template Language – Anweisungen (3) Bedingungen • Bekannte Bedingungen mit #if, #elseif und #else • Abschluss eines Bedingungsblocks mit #end • Vergleiche mit üblichen Zeichen ==, < und > • Bsp.: #if ( $anzahl > 30 ) Kunde ist Großkunde #else Kunde ist Normalkunde #end WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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) WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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( … ) WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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! WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 2003 3. 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. WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  34. VTL – Velocity Template Language – Anweisungen - Übung 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? 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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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() WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  36. VTL – Velocity Template Language – Makros (2) Nun die Definition eines Makro mit Übergabeparametern: #macro( erstelleWarenliste $farbe $produktliste ) <table> #foreach( $produkt in $produktliste ) <tr><td bgcolor=$farbe> $produkt </td></tr> #end </table> #end Der Aufruf mit Übergabeparametern: #set( $gekaufteProdukte = ["MS Office 2002", "Windows XP", "SobigF"] ) #set( $farbe = "blue" ) #createTable( $farbe, $gekaufteProdukte ) Ausgabe: <table> <tr><td color="blue">MS Office 2002</td></tr> <tr><td color="blue">Windows XP</td></tr> <tr><td color="blue">SobigF</td></tr> </table> WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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ügungorg.apache.velocity.servlet.VelocityServlet • Bei Ableitung muss nur eine Methode implementiert werdenpublic Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context context); • Wichtige Unterschiede zur Applikation… • Erzeugung des Kontext-Objekts schon in Basisklasse • Aufruf von merge() für das Template in Basisklasse WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  38. Velocity und Servlets – Beispiel (1) • Unsere Methode handleRequest(…) ausBspVeloServlet.java protected Template handleRequest( HttpServletRequest request, HttpServletResponse resonse, Context context) throws Exception { /* Kunde anlegen */ Kunde kundenobjekt = new Kunde(); kundenobjekt.setName("Schmitz"); kundenobjekt.setGeschlecht("m"); /* Context bearbeiten */ context.put("kunde", kundenobjekt); /* auch einen Vektor kann man reingeben */ Vector gekartikel = new Vector(); gekartikel.addElement( "MS Windows XP Home Edition"); gekartikel.addElement( "Data Becker: Masterung Office 2003"); gekartikel.addElement( "MS Office 2003"); /* gekaufte artikel werden übergeben */ context.put("gekaufteartikel",gekartikel); -> weiter nächste Folie… WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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; } WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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; } WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  41. Velocity und Servlets – Beispiel (4) • 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> • 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/> WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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-1.3.1.jar und das velocity-dep-1.3.1.jar in[Velocity]BspVeloServlet\WEB-INF\lib • Aufruf mithttp://localhost:8080/[Velocity]BspVeloServlet/servlet/BspVeloServlet WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  43. Velocity und Servlets – Beispiel (6) • In einem Browser sieht die Ausgabe nun folgendermaßen aus WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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 ); WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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); WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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"); } WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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"); } WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  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; WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  49. Velocity, Servlets und Datenbankanbindung - Beispiel (6) • Aufruf mithttp://localhost:8080/[Velocity]BspVeloDBServlet/servlet/BspVeloDBServlet • In einem Browser sieht die Ausgabe nun folgendermaßen aus WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

  50. Velocity, Servlets und Datenbankanbindung - Übung 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? 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 WPF Datenbanken im Internet – Velocity Template Engine – WS2003/2004

More Related