turbine. einführung seit 1999 java-framework integration in webserver open source mvc muster wird...
TRANSCRIPT
TURBINE
Einführung Seit 1999 Java-Framework Integration in Webserver Open Source MVC Muster wird umgesetzt
Architektur – MVC Model View Controller
Architektur HTML und Java vermischen JSP (Java Server Pages) Tools Torque Velocity
KonzeptePAGE
LAYOUTNAVIGATION
NAVIGATION
SCREEN
ACTIONS+
LOADERS
Vom Request zur Response...
Warum Velocity? Java-based template engine Integration in Turbine Ermöglicht die Trennung zwischen:
- Geschäftslogik- Darstellung
Im Gegensatz dazu: JSP Mit Velocity einfacher zu arbeiten!!
Noch einmal MVC
Eine Seite mit Velocity bauen (1) Screen
Java Code in WEB-INF/classes compilieren .vm – Template mit selben Namen erzeugen
Unter templates/screens/… speichern TurbineResources.properties editieren
unter WEB-INF/confmodule.packages=org.apache.turbine.modules, org.mycompany.newapp.modules „classpath“ für Turbine
Eine Seite mit Velocity bauen (2) Ausführung
Request z.B. http://localhost:8080/newapp/.../Index.vm
Index class wird ausgeführt (Klasse muss von VelocityScreen erben)
Velocity Template Engine wird aufgerufen und Index.vm ausgeführt
Eine Seite mit Velocity bauen (2) Seitengenerierung
.java
.vm
bauen Context
HTML
Torque
DB
erben von VelocityScreen/Navigation
Eine Seite mit Velocity bauen (2) Beispielpublic class Index extends SecureScreen{ public void doBuildTemplate(RunData data, Context context) { context.put("entries", getEntries()); }
private List getEntries() { try { Criteria criteria = new Criteria(); return RdfPeer.doSelect(criteria); } catch (Exception e) { return null; } }}
Eine Seite mit Velocity bauen (2) Beispiel...#set ( $headings = ["Title", "Dept", "Author", "Url","Body"," "] )
#if ($entries)<table> <tr> <td> <table cellspacing="1" cellpadding="1"> <tr> #foreach ($heading in $headings) #headerCell ($heading) #end </tr> #foreach ($entry in $entries) <tr> #entryCell ($entry.Title) #entryCell ($entry.Dept) #entryCell ($entry.Author) #entryCell ($entry.Url) #entryCell ($entry.Body) <td><a href="$link.setPage("Form.vm").addPathInfo("rdfid", $entry.RdfId)">Edit</a></td> ...
Eine Seite mit Velocity bauen (3) Layout und Navigation
Java Klassen erben von VelocitySiteLayout und VelocitySiteNavigation
.vm Files werden im templates/layout bzw. /navigation Verzeichnis gespeichert
Eine Seite mit Velocity bauen (3) Request
Insert.vmrequest: screen.vm
Default.vm (Layout)
DefaultTop.vm
Menu.vm
DefaultBottom.vm
Eine Seite mit Velocity bauen (4) Actions
Aufruf einer Action Java-File wird ausgeführt, z.B http://.../Index.vm/action/SQL
Erst dann wird die Screen-Class und das .vm-Template ausgeführt
Eine Seite mit Velocity bauen (4) Beispielpublic class SQL extends SecureAction{ public void doInsert(RunData data, Context context) throws Exception { Rdf entry = new Rdf(); data.getParameters().setProperties(entry); entry.save(); }
public void doUpdate(RunData data, Context context) throws Exception { Rdf entry = new Rdf(); data.getParameters().setProperties(entry); entry.setModified(true); entry.setNew(false); entry.save(); }
Docs http://jakarta.apache.org/turbine/turbine-2.3/fsd.html
http://jakarta.apache.org/turbine/turbine-2.3/howto/velocity-site-howto.html
http://jakarta.apache.org/velocity/user-guide.html
http://jakarta.apache.org/velocity/api/index.html
http://www.franken.de/de/veranstaltungen/kongress/2001/turbine.pdf
Services in Turbine Servicearchitektur „Fulcrum“ Unterstützen MVC-Komponenten Zahlreiche Services für Web-Anwendungen Services sind Einzelanwendungen Selbstaufrufend Ressourcensparend Service kann auch ohne Turbine ausgeführt
werden
Übersicht über Services (1) Assembler Broker Service Cache Service Castor Service FreeMarker Service Intake Service JSP Service Localization Service Logging Service
Übersicht über Services (2) MimeType Service Pool Service Resources Service RunData Service Scheduler Service Security Service Template Service Upload Service
Übersicht über Services (3) Velocity Service XSLT Service UI-Manager Service
http://jakarta.apache.org/turbine/turbine-2.3/services/index.html
UI Manager (1) Service für die Benutzerschnittstelle
Ähnlich den CSS-Files
Wird in Template-Files eingebunden
Eigene Skin-Files
UI Manager (2) pathoftdk/webapps/newapp/resources/
ui/skins/default/skin.props
z.B.: bgcolor = #FFFFFF
Template-File öffnen
<img src=„$ui.image($ui.imagename)“>
Torque – ein Überblick
1. Datenbankunabhängige XML-Beschreibung des Datenschemas
2. Generierung von Klassen
Datenbankabfragen ohne explizites SQL möglich
Unterstützung vieler Datenbankanbieter
Sicherheit und Benutzerkonzept (1)
Ausgeklügeltes Benutzerkonzept mit Rechten: individuelle Aktionen Rollen: Vereinigung von verschiedenen
Rechten Gruppen: weitere Aufteilung in horizontaler
Richtung
Ablauf des Benutzerkonzeptes (1)
Bedingungen: Auszuführende Methoden mit Namensmuster do<Name der Action>
Erben von SecureAction, SecureScreen, usw.
Ablauf des Benutzerkonzeptes (2)
Sollen Actions in Turbine vor unbefugter Ausführung geschützt werden, so müssen sie von der Klasse SecureAction erben, in der die Sicherheitsabfragen gekapselt sind.
Ein kurzer Blick in die Datenbank TURBINE_USER TURBINE_PERMISSION TURBINE_ROLE TURBINE_GROUP TURBINE_ROLE_PERMISSION TURBINE_USER_GROUP_ROLE
Beispiel zur Handhabung//User von RunDataUser user = data.getUser();
// AccessControlList Object von RunDataAccessControlList acl = data.getACL();
// hat sich der User eingeloggt und hat er die benötigten Rechte?if( user.hasLoggedIn() && acl.hasPermission("viewinvoice", "Accounting") ){ data.setMessage("You have permission to view the invoices."); setTemplate(data, "Invoice.vm");}else{ data.setMessage("You do not have Permission to view the Invoices"); setTemplate(data, "UnauthorizedRequest.vm");}
EndeVielen Dank für Eure
Aufmerksamkeit!