Upload
manfried-lauer
View
107
Download
0
Embed Size (px)
Citation preview
Turbine Konzepte und Turbine Konzepte und DiensteDienste
(insb. Velocity Integration)(insb. Velocity Integration)
Julian WankJulian WankGerald RoglGerald Rogl
22
InhaltInhalt
• EinführungEinführung
• MVCMVC
• TorqueTorque
• Turbine ServicesTurbine Services
• Upload ServiceUpload Service
• Users and SecurityUsers and Security
• Velocity oder JSPVelocity oder JSP
• SessionsSessions
33
Inhalt (2)Inhalt (2)
• Java Files und TemplatesJava Files und Templates• Eine Seite mit Velocity bauenEine Seite mit Velocity bauen• Wie Templates gefunden werdenWie Templates gefunden werden• Templates und ActionsTemplates und Actions• AusführungsreihenfolgeAusführungsreihenfolge
– LoaderLoader– User LoginUser Login
• Velocity ContextVelocity Context– Automatisch erzeugte ObjekteAutomatisch erzeugte Objekte– Eigene Objekte hinzufügenEigene Objekte hinzufügen
• Wichtige PfadeWichtige Pfade• DocsDocs
44
EinführungEinführung
• Open SourceOpen Source– KostenlosKostenlos– Quellcode ist frei verfügbarQuellcode ist frei verfügbar
• Server-Side Java FrameworkServer-Side Java Framework– Erlaubt schnelles und sicheres bauen von Web Erlaubt schnelles und sicheres bauen von Web
ApplicationenApplicationen• Teile auch einzeln verwendbarTeile auch einzeln verwendbar
– TDK beinhaltet Servlet Runner Tomcat 4.0TDK beinhaltet Servlet Runner Tomcat 4.0– Object-Relational Mapping Layer (Torque)Object-Relational Mapping Layer (Torque)– Presentation Layer (Velocity oder JSP)Presentation Layer (Velocity oder JSP)
55
Model-View-Controller Model-View-Controller (MVC)(MVC)
• Design Pattern (Entwurfsmuster)Design Pattern (Entwurfsmuster)– Architektur vonArchitektur von
•Graphischen BenutzeroberflächenGraphischen Benutzeroberflächen
•Webgestützten AnwendungenWebgestützten Anwendungen
– Trennung vonTrennung von•Daten – Business Logic (Model)Daten – Business Logic (Model)
•Präsentation – User Interface (View)Präsentation – User Interface (View)
•Ablaufsteuerung (Controller)Ablaufsteuerung (Controller)
Bestandteile separat entwickelnBestandteile separat entwickeln
66
– Für die View empfiehlt Sun den Einsatz von Für die View empfiehlt Sun den Einsatz von Java Server Pages (JSPs)Java Server Pages (JSPs)• Daten werden aus Model geholt (an Stelle von Daten werden aus Model geholt (an Stelle von
speziellen Tags), und in die HTML-Seite eingefügt speziellen Tags), und in die HTML-Seite eingefügt (Pull-MVC)(Pull-MVC)
• Push-Strategie: Model kümmert sich um die Aktualität Push-Strategie: Model kümmert sich um die Aktualität der Viewder View
– ControllerController• Wird meist durch Servlet repräsentiert (reagiert auf Wird meist durch Servlet repräsentiert (reagiert auf
Nutzerinteraktion mit der View und ruft Nutzerinteraktion mit der View und ruft entsprechende Methoden des Models auf)entsprechende Methoden des Models auf)
– VT: HTML Designer kann GUI ändern ohne den VT: HTML Designer kann GUI ändern ohne den Java Code anzurührenJava Code anzurühren
77
88
TorqueTorque
• Kreiert SQL Daten-Schema für DBKreiert SQL Daten-Schema für DB
• Kreiert Java Object Source FilesKreiert Java Object Source Files Tabelle Tabelle Klasse (nicht ändern!) Klasse (nicht ändern!)
• (Business Objects müssen in XML (Business Objects müssen in XML modelliert sein)modelliert sein)
• Alles weitere Alles weitere Team 3 Team 3
99
Turbine ServicesTurbine Services
• Als Interface verwirklichtAls Interface verwirklicht Erweiterbarkeit einfachErweiterbarkeit einfach
– Ähnliches Service erweiternÄhnliches Service erweitern– Neues Service schreiben (implements yourInterface Neues Service schreiben (implements yourInterface
extends TurbineBaseService)extends TurbineBaseService)
• Über 25 eingebaute ServicesÜber 25 eingebaute Services– Upload ServiceUpload Service– Security ServiceSecurity Service– Logging ServiceLogging Service– Cache ServiceCache Service– Crypto ServiceCrypto Service
1010
Upload ServiceUpload Service
• Einstellen (im Einstellen (im TurbineResources.properties)TurbineResources.properties)– Ob files automatisch durch den Ob files automatisch durch den
ParameterParser angenommen werdenParameterParser angenommen werden– Wo files vorläufig gespeichert werden sollenWo files vorläufig gespeichert werden sollen– Die max. Größe einer Anfrage die noch Die max. Größe einer Anfrage die noch
bearbeitet werden sollbearbeitet werden soll– Die max. Größe die ge-cashed wird (durch die Die max. Größe die ge-cashed wird (durch die
TurbineUploadService class)TurbineUploadService class)
1111
– Pfad im System setzen, wo sich das repository Pfad im System setzen, wo sich das repository befindetbefindet
– Ein HTML File kreieren, dass als User-Interface Ein HTML File kreieren, dass als User-Interface dientdient
– Wenn FileItem kreiert wurde können die public-Wenn FileItem kreiert wurde können die public-methoden darauf zugreifen und mit ihm methoden darauf zugreifen und mit ihm arbeitenarbeiten
– Um temporär gespeicherte Daten muss man Um temporär gespeicherte Daten muss man sich nicht kümmern, da das Service einen sich nicht kümmern, da das Service einen eigenen „Garbage Collector“ hateigenen „Garbage Collector“ hat
1212
Users and SecurityUsers and Security
• Security ModelSecurity Model– UserUser– GroupGroup– RoleRole– PermissionPermission
• ab Turbine 2ab Turbine 2– org.apache.turbine.services.security org.apache.turbine.services.security
PackagePackage
1313
Velocity oder JSPVelocity oder JSP
• Designer hat die Wahl der Designer hat die Wahl der Präsentations-SprachePräsentations-Sprache– JSP (Java Server Pages)JSP (Java Server Pages)
•Etablierter Standard von Sun MicrosystemsEtablierter Standard von Sun Microsystems•Existierende Konfiguration anpassenExistierende Konfiguration anpassen
– VelocityVelocity•Einfacher zu arbeitenEinfacher zu arbeiten•Auf Turbine zugeschnittenAuf Turbine zugeschnitten•Zusätzliche Power von JSP wird hier nicht Zusätzliche Power von JSP wird hier nicht
vermisstvermisst
1414
SessionsSessions
• Problem: Zustandslosigkeit von HTTPProblem: Zustandslosigkeit von HTTP– Es gibt keine „Sessions“ Es gibt keine „Sessions“ jede Anfrage wird individuell jede Anfrage wird individuell
und unabhängig von anderen betrachtetund unabhängig von anderen betrachtet– Auch für „Nicht-DBMS-Anwendungen“ ein Problem Auch für „Nicht-DBMS-Anwendungen“ ein Problem
(Präsentieren der Ergebnisse einer Suche in Teilen)(Präsentieren der Ergebnisse einer Suche in Teilen)
• Verschiedene Varianten, Zustandsinfos in Verschiedene Varianten, Zustandsinfos in Abfragen „einzubauen“Abfragen „einzubauen“– Zustandsinformation in URL kodierenZustandsinformation in URL kodieren– CookiesCookies– Autorisation des BenutzersAutorisation des Benutzers– Versteckte Felder in FormularenVersteckte Felder in Formularen– Java Servlet Session Tracking APIJava Servlet Session Tracking API
1515
• Zustandsinformation in URL kodierenZustandsinformation in URL kodieren– Session ID wird im URL kodiert, z.B. durchSession ID wird im URL kodiert, z.B. durch
•Extra Pfad Info (die das Servlet versteht)Extra Pfad Info (die das Servlet versteht) http://server:80/servlet/MyServlet/123
•Zusätzlichen ParameterZusätzlichen Parameter http://server:81/servlet/MyServlet?
sessionid=123
•Eigene NotationEigene Notation http://server:82/servlet/MyServlet;
$sessionid$123
1616
• CookiesCookies– Sie werden am Client gespeichert (falls Sie werden am Client gespeichert (falls
der Benutzer das erlaubt)der Benutzer das erlaubt)– BeschränkungenBeschränkungen
•20 Cookies pro Site20 Cookies pro Site
•300 Cookies insgesamt pro User300 Cookies insgesamt pro User
•Größe je Cookie maximal 4096 bytesGröße je Cookie maximal 4096 bytes
1717
Session AttributeSession Attribute
• Damit können serverseitig Werte Damit können serverseitig Werte gespeichert werdengespeichert werden
• Sie sind nützlich um Dinge wie Login-Sie sind nützlich um Dinge wie Login-Infos oder Warenkörbe zu Infos oder Warenkörbe zu implementierenimplementieren
1818
Java Files und TemplatesJava Files und Templates
• Request Request Turbine Servlet Turbine Servlet• Request BrokeringRequest Brokering
• Build Context ObjectBuild Context Object
• Call Velocity Template EngineCall Velocity Template Engine
1919
Java Files und Templates 2Java Files und Templates 2Eine Site mit Velocity bauenEine Site mit Velocity bauen
1.1. ScreenScreen1.1. Java Code in WEB-INF/classes compilierenJava Code in WEB-INF/classes compilieren2.2. .vm – Template mit selben Namen .vm – Template mit selben Namen
erzeugenerzeugenUnter templates/screens/… speichernUnter templates/screens/… speichernHier BODY-Teil der SeiteHier BODY-Teil der Seite
3.3. TurbineResources.properties editierenTurbineResources.properties editierenWEB-INF/confWEB-INF/confmodule.packages=org.apache.turbine.momodule.packages=org.apache.turbine.modules, com.yourcompany.app.modules dules, com.yourcompany.app.modules „classpath“ für Turbine„classpath“ für Turbine
2020
Java Files und Templates 3Java Files und Templates 3Eine Site mit Velocity bauenEine Site mit Velocity bauen
• AusführungAusführung
1.1. Request z.B. Request z.B. http://www.../HelloWorld.vmhttp://www.../HelloWorld.vm
2.2. HelloWorld class ausgeführt (Klasse HelloWorld class ausgeführt (Klasse muss von VelocityScreen erben)muss von VelocityScreen erben)
3.3. Velocity Template Engine aufgerufen Velocity Template Engine aufgerufen und und HelloWorld.vm ausgeführtHelloWorld.vm ausgeführt
2121
Java Files und Templates 4Java Files und Templates 4Eine Site mit Velocity bauenEine Site mit Velocity bauen
2.2. Layout und NavigationLayout und Navigation1.1. Java Klassen erben von VelocitySiteLayout Java Klassen erben von VelocitySiteLayout
und VelocitySiteNavigationund VelocitySiteNavigation2.2. .vm Files werden im templates/layout bzw. .vm Files werden im templates/layout bzw.
/navigation Verzeichnis gespeichert/navigation Verzeichnis gespeichert
Wichtig: Default.vm enthält das Gesamtlayout Wichtig: Default.vm enthält das Gesamtlayout indem Menüs, Navigation etc. als Variable indem Menüs, Navigation etc. als Variable in eine Struktur eingefügt werden in eine Struktur eingefügt werden
/templates/…/layouts/Default.vm/templates/…/layouts/Default.vm
2222
Wie Templates gefunden Wie Templates gefunden werdenwerden
• data.getParameters().getString("template"data.getParameters().getString("template") liefert Pfad zum Template) liefert Pfad zum Template
1.1. Screen, Navigation und Layout werden Screen, Navigation und Layout werden gesucht, beginnend im selben Verzeichnis gesucht, beginnend im selben Verzeichnis wie Templatewie Template
1.1. Selber NameSelber Name
2.2. DefaultDefault
Wenn die Template Variable nicht Wenn die Template Variable nicht existiert, wird VelocityScreen und existiert, wird VelocityScreen und templates/screens/index.vm ausgeführttemplates/screens/index.vm ausgeführt
2323
Templates und ActionsTemplates und Actions
• Action – Parameter im URIAction – Parameter im URIz.B. z.B. template/HelloWorld.vm/action/UpdateWortemplate/HelloWorld.vm/action/UpdateWorld ld UpdateWorld Java File ausgeführt UpdateWorld Java File ausgeführt
• Actions werden vor Screen ausgeführtActions werden vor Screen ausgeführt• Erst danach Screen Class und .vm Erst danach Screen Class und .vm
TemplateTemplate• Actions liefern nichts zurück, können aber Actions liefern nichts zurück, können aber
in den Message String des RunData in den Message String des RunData Objekts schreibenObjekts schreibenz.B. z.B. data.setMessage("Username does not exist") data.setMessage("Username does not exist")
2424
AusführungsreihenfolgeAusführungsreihenfolge
1.1. HTTP Client RequestHTTP Client Request2.2. Ausführen des Turbine ServletsAusführen des Turbine Servlets3.3. Ausführen Page Modul – Wenn Action Ausführen Page Modul – Wenn Action
ausführenausführen4.4. Screen Objekt nach Layout fragenScreen Objekt nach Layout fragen5.5. Layout ausführen - Layout führt Screen Layout ausführen - Layout führt Screen
(„Body“) aus(„Body“) aus6.6. Layout führt Navigation Modul ausLayout führt Navigation Modul aus7.7. Seite wird zurückgeliefertSeite wird zurückgeliefert
2525
Ausführungsreihenfolge - Ausführungsreihenfolge - LoaderLoader
• Loader – wozu?Loader – wozu?– Dynamisches Laden der fünf ModuleDynamisches Laden der fünf Module– Trennung von Code und Framework - VorteileTrennung von Code und Framework - Vorteile
• Update des FrameworksUpdate des Frameworks
• Distribution des Codes alleineDistribution des Codes alleine
– Web-App. Module bleiben in deren Package Web-App. Module bleiben in deren Package PfadPfad
• Loader ClasspathLoader ClasspathWEB-INF/conf WEB-INF/conf TurbineResource.properties TurbineResource.properties MODULE PACKAGES MODULE PACKAGES hier eigene Module hier eigene Module hinzufügenhinzufügen
2626
Ausführungsreihenfolge – Ausführungsreihenfolge – User LoginUser Login
• Konfiguration: Konfiguration: TurbineResources.properties TurbineResources.properties Framework SettingsFramework Settings
• Nachdem Session eingerichtet ist, Nachdem Session eingerichtet ist, werden Daten im RunData Objekt werden Daten im RunData Objekt gespeichert ($data)gespeichert ($data)
• Turbine Servlet führt LoginUser Action Turbine Servlet führt LoginUser Action ausaus
• Turbine Servlet führt DefaultPage ausTurbine Servlet führt DefaultPage aus
2727
Velocity Context – automatisch Velocity Context – automatisch erzeugte Objekteerzeugte Objekte• RunData ObjektRunData Objekt
– Keyword: data bzw. $dataKeyword: data bzw. $data– Interface zur LaufzeitinformationInterface zur Laufzeitinformation– Ein Objekt pro RequestEin Objekt pro Request
• TemplateLink ObjektTemplateLink Objekt– Keyword $linkKeyword $link– Konvertierung von Links in ReferenzenKonvertierung von Links in Referenzen
• TemplatePageAttributes ObjektTemplatePageAttributes Objekt– Keyword $pageKeyword $page– Änderung von HTML AttributenÄnderung von HTML Attributen
2828
Velocity Context – eigene Velocity Context – eigene Objekte hinzufügenObjekte hinzufügen
• importimport org.apache.velocity.context.Context;org.apache.velocity.context.Context;
• importimport org.apache.turbine.util.RunData; org.apache.turbine.util.RunData;• doBuildTemplate(RunData data, Context doBuildTemplate(RunData data, Context
context)context)• context.put("hello",new String("testing")); context.put("hello",new String("testing")); • Im Template: Im Template: $hello the hello reference $hello the hello reference • Output: Output: testing the hello reference testing the hello reference
2929
Wichtige PfadeWichtige Pfade
• Default LayoutDefault Layout– webapps/APPNAME/templates/app/layouts/webapps/APPNAME/templates/app/layouts/
Default.vmDefault.vm– Definiert wie das default layout angezeigt Definiert wie das default layout angezeigt
wirdwird
• Files die in das layout template eingefügt Files die in das layout template eingefügt werdenwerden– webapps/APPNAME/templates/app/webapps/APPNAME/templates/app/
navigationsnavigations
3030
Wichtige Pfade (2)Wichtige Pfade (2)
• Files in diesem Verzeichnis sind die die Files in diesem Verzeichnis sind die die "$screen_placeholder ersetzen"$screen_placeholder ersetzen– webapps/APPNAME/templates/app/screenswebapps/APPNAME/templates/app/screens
• Makros für HTML FragmenteMakros für HTML Fragmente– #webapps/APPNAME/templates/app/#webapps/APPNAME/templates/app/
GlobalMacros.vmGlobalMacros.vm
• Java file die sich auf Index.vm beziehenJava file die sich auf Index.vm beziehen– webapps/APPNAME/WEB-INF/src/java/webapps/APPNAME/WEB-INF/src/java/
PACKAGE/modules/screensPACKAGE/modules/screens
3131
Wichtige Pfade (3)Wichtige Pfade (3)
• Java files für Action ModuleJava files für Action Module– webapps/APPNAME/WEB-INF/src/java/webapps/APPNAME/WEB-INF/src/java/
PACKAGE/modules/actionsPACKAGE/modules/actions
• Datenbank-SchemaDatenbank-Schema– webapps/APPNAME/WEB-INF/confwebapps/APPNAME/WEB-INF/conf
• Build file (z.B. nach Änderung des DB Build file (z.B. nach Änderung des DB Schemas ausführen)Schemas ausführen)– webapps/APPNAME/WEB-INF/buildwebapps/APPNAME/WEB-INF/build– "ant compile" kompiliert Java files neu"ant compile" kompiliert Java files neu
3232
Wichtige Pfade (4)Wichtige Pfade (4)
• Java files die benutzt werden, um auf Java files die benutzt werden, um auf die Datenbank zuzugreifendie Datenbank zuzugreifen– webapps/APPNAME/WEB-INF/src/java/webapps/APPNAME/WEB-INF/src/java/
PACKAGE/omPACKAGE/om
• TurbineResource.property fileTurbineResource.property file– webapps/APPNAME/WEB-INF/confwebapps/APPNAME/WEB-INF/conf
3333
DocsDocs
• http://http://jakarta.apache.orgjakarta.apache.org//turbineturbine//– TDKTDK– How-To‘sHow-To‘s
• http://http://jakarta.apache.orgjakarta.apache.org//turbineturbine/turbine-2.3//turbine-2.3/apidocsapidocs//index.htmlindex.html
3434
EndeEnde
Vielen Dank für Eure Aufmerksamkeit!Vielen Dank für Eure Aufmerksamkeit!