340 likes | 491 Views
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
E N D
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 • 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 • 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 2Eine Site mit Velocity bauen • Screen • Java Code in WEB-INF/classes compilieren • .vm – Template mit selben Namen erzeugenUnter templates/screens/… speichernHier BODY-Teil der Seite • TurbineResources.properties editierenWEB-INF/confmodule.packages=org.apache.turbine.modules, com.yourcompany.app.modules „classpath“ für Turbine
Java Files und Templates 3Eine 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 4Eine 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 URIz.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 schreibenz.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 ClasspathWEB-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 • 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!