Turbine Konzepte und Dienste (insb. Velocity Integration) Julian Wank Gerald Rogl
Inhalt Einführung MVC Torque Turbine Services Upload Service Users and Security Velocity oder JSP Sessions
Inhalt (2) Java Files und Templates Eine Seite mit Velocity bauen Wie Templates gefunden werden Templates und Actions Ausführungsreihenfolge Loader User Login Velocity Context Automatisch erzeugte Objekte Eigene Objekte hinzufügen Wichtige Pfade Docs
Einführung Open Source Server-Side Java Framework Kostenlos Quellcode ist frei verfügbar Server-Side Java Framework Erlaubt schnelles und sicheres bauen von Web Applicationen Teile auch einzeln verwendbar TDK beinhaltet Servlet Runner Tomcat 4.0 Object-Relational Mapping Layer (Torque) Presentation Layer (Velocity oder JSP)
Model-View-Controller (MVC) Design Pattern (Entwurfsmuster) Architektur von Graphischen Benutzeroberflächen Webgestützten Anwendungen Trennung von Daten – Business Logic (Model) Präsentation – User Interface (View) Ablaufsteuerung (Controller) Bestandteile separat entwickeln
Für die View empfiehlt Sun den Einsatz von Java Server Pages (JSPs) Daten werden aus Model geholt (an Stelle von speziellen Tags), und in die HTML-Seite eingefügt (Pull-MVC) Push-Strategie: Model kümmert sich um die Aktualität der View Controller Wird meist durch Servlet repräsentiert (reagiert auf Nutzerinteraktion mit der View und ruft entsprechende Methoden des Models auf) VT: HTML Designer kann GUI ändern ohne den Java Code anzurühren
Torque Kreiert SQL Daten-Schema für DB Kreiert Java Object Source Files Tabelle Klasse (nicht ändern!) (Business Objects müssen in XML modelliert sein) Alles weitere Team 3
Turbine Services Als Interface verwirklicht Erweiterbarkeit einfach Ähnliches Service erweitern Neues Service schreiben (implements yourInterface extends TurbineBaseService) Über 25 eingebaute Services Upload Service Security Service Logging Service Cache Service Crypto Service
Upload Service Einstellen (im TurbineResources.properties) Ob files automatisch durch den ParameterParser angenommen werden Wo files vorläufig gespeichert werden sollen Die max. Größe einer Anfrage die noch bearbeitet werden soll Die max. Größe die ge-cashed wird (durch die TurbineUploadService class)
Pfad im System setzen, wo sich das repository befindet Ein HTML File kreieren, dass als User-Interface dient Wenn FileItem kreiert wurde können die public-methoden darauf zugreifen und mit ihm arbeiten Um temporär gespeicherte Daten muss man sich nicht kümmern, da das Service einen eigenen „Garbage Collector“ hat
Users and Security Security Model ab Turbine 2 User Group Role Permission ab Turbine 2 org.apache.turbine.services.security Package
Velocity oder JSP Designer hat die Wahl der Präsentations-Sprache JSP (Java Server Pages) Etablierter Standard von Sun Microsystems Existierende Konfiguration anpassen Velocity Einfacher zu arbeiten Auf Turbine zugeschnitten Zusätzliche Power von JSP wird hier nicht vermisst
Sessions Problem: Zustandslosigkeit von HTTP Es gibt keine „Sessions“ jede Anfrage wird individuell und unabhängig von anderen betrachtet Auch für „Nicht-DBMS-Anwendungen“ ein Problem (Präsentieren der Ergebnisse einer Suche in Teilen) Verschiedene Varianten, Zustandsinfos in Abfragen „einzubauen“ Zustandsinformation in URL kodieren Cookies Autorisation des Benutzers Versteckte Felder in Formularen Java Servlet Session Tracking API
Zustandsinformation in URL kodieren Session ID wird im URL kodiert, z.B. durch Extra Pfad Info (die das Servlet versteht) http://server:80/servlet/MyServlet/123 Zusätzlichen Parameter http://server:81/servlet/MyServlet?sessionid=123 Eigene Notation http://server:82/servlet/MyServlet;$sessionid$123
Cookies Sie werden am Client gespeichert (falls der Benutzer das erlaubt) Beschränkungen 20 Cookies pro Site 300 Cookies insgesamt pro User Größe je Cookie maximal 4096 bytes
Session Attribute Damit können serverseitig Werte gespeichert werden Sie sind nützlich um Dinge wie Login-Infos oder Warenkörbe zu implementieren
Java Files und Templates Request Turbine Servlet Request Brokering Build Context Object Call Velocity Template Engine
Java Files und Templates 2 Eine Site mit Velocity bauen Screen Java Code in WEB-INF/classes compilieren .vm – Template mit selben Namen erzeugen Unter templates/screens/… speichern Hier BODY-Teil der Seite TurbineResources.properties editieren WEB-INF/conf module.packages=org.apache.turbine.modules, com.yourcompany.app.modules „classpath“ für Turbine
Java Files und Templates 3 Eine Site mit Velocity bauen Ausführung Request z.B. http://www.../HelloWorld.vm HelloWorld class ausgeführt (Klasse muss von VelocityScreen erben) Velocity Template Engine aufgerufen und HelloWorld.vm ausgeführt
Java Files und Templates 4 Eine Site mit Velocity bauen Layout und Navigation Java Klassen erben von VelocitySiteLayout und VelocitySiteNavigation .vm Files werden im templates/layout bzw. /navigation Verzeichnis gespeichert Wichtig: Default.vm enthält das Gesamtlayout indem Menüs, Navigation etc. als Variable in eine Struktur eingefügt werden /templates/…/layouts/Default.vm
Wie Templates gefunden werden data.getParameters().getString("template") liefert Pfad zum Template Screen, Navigation und Layout werden gesucht, beginnend im selben Verzeichnis wie Template Selber Name Default Wenn die Template Variable nicht existiert, wird VelocityScreen und templates/screens/index.vm ausgeführt
Templates und Actions Action – Parameter im URI z.B. template/HelloWorld.vm/action/UpdateWorld UpdateWorld Java File ausgeführt Actions werden vor Screen ausgeführt Erst danach Screen Class und .vm Template Actions liefern nichts zurück, können aber in den Message String des RunData Objekts schreiben z.B. data.setMessage("Username does not exist")
Ausführungsreihenfolge HTTP Client Request Ausführen des Turbine Servlets Ausführen Page Modul – Wenn Action ausführen Screen Objekt nach Layout fragen Layout ausführen - Layout führt Screen („Body“) aus Layout führt Navigation Modul aus Seite wird zurückgeliefert
Ausführungsreihenfolge - Loader Loader – wozu? Dynamisches Laden der fünf Module Trennung von Code und Framework - Vorteile Update des Frameworks Distribution des Codes alleine Web-App. Module bleiben in deren Package Pfad Loader Classpath WEB-INF/conf TurbineResource.properties MODULE PACKAGES hier eigene Module hinzufügen
Ausführungsreihenfolge – User Login Konfiguration: TurbineResources.properties Framework Settings Nachdem Session eingerichtet ist, werden Daten im RunData Objekt gespeichert ($data) Turbine Servlet führt LoginUser Action aus Turbine Servlet führt DefaultPage aus
Velocity Context – automatisch erzeugte Objekte RunData Objekt Keyword: data bzw. $data Interface zur Laufzeitinformation Ein Objekt pro Request TemplateLink Objekt Keyword $link Konvertierung von Links in Referenzen TemplatePageAttributes Objekt Keyword $page Änderung von HTML Attributen
Velocity Context – eigene Objekte hinzufügen import org.apache.velocity.context.Context; import org.apache.turbine.util.RunData; doBuildTemplate(RunData data, Context context) context.put("hello",new String("testing")); Im Template: $hello the hello reference Output: testing the hello reference
Wichtige Pfade Default Layout webapps/APPNAME/templates/app/layouts/Default.vm Definiert wie das default layout angezeigt wird Files die in das layout template eingefügt werden webapps/APPNAME/templates/app/navigations
Wichtige Pfade (2) Files in diesem Verzeichnis sind die die "$screen_placeholder ersetzen webapps/APPNAME/templates/app/screens Makros für HTML Fragmente #webapps/APPNAME/templates/app/GlobalMacros.vm Java file die sich auf Index.vm beziehen webapps/APPNAME/WEB-INF/src/java/PACKAGE/modules/screens
Wichtige Pfade (3) Java files für Action Module Datenbank-Schema webapps/APPNAME/WEB-INF/src/java/PACKAGE/modules/actions Datenbank-Schema webapps/APPNAME/WEB-INF/conf Build file (z.B. nach Änderung des DB Schemas ausführen) webapps/APPNAME/WEB-INF/build "ant compile" kompiliert Java files neu
Wichtige Pfade (4) Java files die benutzt werden, um auf die Datenbank zuzugreifen webapps/APPNAME/WEB-INF/src/java/PACKAGE/om TurbineResource.property file webapps/APPNAME/WEB-INF/conf
Docs http://jakarta.apache.org/turbine/ TDK How-To‘s http://jakarta.apache.org/turbine/turbine-2.3/apidocs/index.html
Ende Vielen Dank für Eure Aufmerksamkeit!