Upload
ottoline-zaske
View
106
Download
2
Embed Size (px)
Citation preview
Frameworks zur Implementierung von Hypertext Anwendungen
Thorsten BergerDiplomstudiengang Informatik
5. Semester
Ein Vortrag im Rahmen des Problemseminars„Neue Entwicklungen in der Telematik“
Universität LeipzigLehrstuhl für angewandte Telematik / e-Business
Prof. Dr. Volker GruhnDr. Sami Beydeda
26. Januar 2004
2Frameworks zur Implementierung von Hypertext Anwendungen
1. Einleitung, Definitionen
2. Grundlagen
3. Struts
4. Weitere Apache Frameworks
5. XForms
6. Literatur
Übersicht
1. Einführung / Definition
Hypertext-Anwendung, Framework
4Frameworks zur Implementierung von Hypertext Anwendungen
Hypertext-Anwendung
• Versuch einer Definition:
- verteilte Anwendung, graphische Oberfläche im WWW- Gestaltung erfolgt mit HTML, WML, XML ...- Applikationsprotokoll HTTP
• Verwendung:
- WWW: Portale, Online-Shops, Suchmaschinen etc
- Intranet: firmeninterne Kommunikation, ersetzen „Fat Clients“
- Webservices: standardisierte APIs (WSDL) für best. Dienstleistungen, z.B. Suchanfragen bei Google ohne Browser
5Frameworks zur Implementierung von Hypertext Anwendungen
Framework
• Definition:
Helmut Balzert in [1]:
„Ein Rahmenwerk (framework) ist ein durch einen Software-Entwickler anpassbares oder erweiterbares System kooperierender Klassen, die einen wiederverwendbaren Entwurf für einen bestimmten Anwendungsbereich implementieren.“
• grundlegendes Design/Architektur
• hohes Abstraktionsvermögen
• Bereitstellung versch. Komponenten
Beschleunigung der Entwicklung
2. Grundlagen
CGI, Server Extensions, Server Scripting, Servlet API, Modelle und Architekturen
7Frameworks zur Implementierung von Hypertext Anwendungen
CGI, Server-Extensions
CGI – Interface zwischen WebServer und Anwendung
Client
Server
Anwendung
Request
Response
„fork“
Ausgabe(HTML)
Server Extensions:• WebServer-spezifische API• z.B. Netscape NSAPI, Microsoft ISAPI, Apache Module
8Frameworks zur Implementierung von Hypertext Anwendungen
Server Scripting, Servlets
Server Scripting• Ausführung von in HTML eingebettetem
Script Code durch Interpreter• Netscape proprietäre „Server Side
Includes“ (SSI)• moderne Scriptsprachen JSP, PHP,
ASP, Python
Java Servlets• Spezifikation der J2EE• Weiterentwicklung der „Server Extensions“• Ausführung in Servlet Container, z.B.:
- Jakarta Tomcat
- Jetty
- Macromedia Jrun
2.1. Modelle und Architekturen
Multi-Tier, Model 1, MVC
10Frameworks zur Implementierung von Hypertext Anwendungen
Multi-Tier
„Multi-Tier“-Architektur (Quelle: SUN)
11Frameworks zur Implementierung von Hypertext Anwendungen
MVC
MVC – Modell (Quelle: SUN)
• OO-Framework zur GUI-Entwicklung
• ursprünglich Verwendung in Smalltalk-80 am Xerox PARC
+ saubere Kapselung der Komponenten
+ Erweiterbarkeit
+ Wiederverwendbarkeit
+ Austauchbarkeit der View
- viele Transaktionen zwischen Komponenten(Unmenge an Listenern möglich)
- Ereignisbehandlung bei verbindungslosem HTTP-Protokoll schwierig zu adaptieren
12Frameworks zur Implementierung von Hypertext Anwendungen
SUN – Model 1, Model 2
Client
Request
JSP
Bean
Response
Container / Middle Tier EIS Tier
Client
RequestController
Servlet
Response
Container / Middle Tier EIS Tier
ViewJSP
ModelBean
Model 1
Model 2
3. Struts
Übersicht, Controller, View, Model, Formulare, Validator
14Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Übersicht I
• seit 1999 Framework als Teil des Apache Jakarta Projekts Open Source
• basiert auf J2EE/Servlet-Spezifikation• Model 2• bereits sehr große Verbreitung• Unterstützung durch IBM und SUN• sehr gut dokumentiert• internationalisiert• plattformunabhängig
15Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Übersicht III
R esponse
R equest View
Ja vaS e rve rP a ge Ja vaS e rve rP a ge
Ja vaS e rve rP a ge
A c tio nS e rv le t
C l ien t
s tru ts -co n fig .xm l in it
Frontend-Model
F o rm B e a n F o rm B e a n
F o rm B e a n
A c tio n A c tio n
A c tio n
Controlle r
A pp lika tio n s lo g ik / B a ck -E nd -M o de l
C o nta ine r / We b Se rve r
16Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Controller I
ActionServlet – struts-config.xmlActionServlet – struts-config.xml
<struts-config>
<form-beans> <form-bean name="logonForm" type="org.apache.struts.example.LogonForm"/> </form-beans>
<global-forwards type="org.apache.struts.action.ActionForward"/> <forward name="logon" path="/logon.jsp" redirect="false"/> </global-forwards>
<action-mappings> <action path="/logon"
type="org.apache.struts.example.LogonAction"name="logonForm"scope="request"input="/logon.jsp"unknown="false"validate="true"/>
</action-mappings>
</struts-config>
17Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Controller II
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
Einstiegspunkt:
- nur eine Instanz für alle Requests Thread-Sicherheit gefordert!- Applikationslogik vermeiden!
ActionsActions
Ablauf:• aktuelle User-Session validieren• Validierung gesendeter Formular-Daten (vs. ActionForm-Bean)• Ausführung Applikationslogik• Aktualisierung verschiedener Session-/Request-Beans• Rückgabe eines ActionForward
18Frameworks zur Implementierung von Hypertext Anwendungen
Struts – View I
• basiert auf Javas Internationalisierungsfähigkeiten
• Locale - Klasse repräsentiert Nationalität inkl. versch. Eigenheiten
• ResourceBundle – Klasse enthält Locale-spezifische Objekte
ResourceBundles können im Deployment-Descriptor (web.xml) angegeben werden:
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name> <param-value>com.mycompany.mypackage.MyResources</param-value> </init-param> ...</servlet>
Internationalisierung (i18n)Internationalisierung (i18n)
19Frameworks zur Implementierung von Hypertext Anwendungen
Struts – View II
• erweitern vorhandene JSP-Taglibs um sinnvolle Funktionen:- Labels in länderspezifischer Sprache- iterative und logische Funktionen- Definition und Einbetten von Beans
• einfach zu erlernen
• Custom-Tags möglich
• später wahrscheinlich durch JSTL (JCP, Bestandteil von JSP 2.0) abgelöst
<jsp:useBean id=“cart“ scope=“request“ class=“com.mycompany.MyApp.MyCart“/>
Benutzung einer Bean:
Struts Tag-SetStruts Tag-Set
20Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Model I
ModelModel
Frontend-Model
•ActionForm-Beans
•Datenbasis für View (JSP)
•stellt View Ausschnitt des Backends-Models bereit
•enthält Request-Parameter
Frontend-Model
•ActionForm-Beans
•Datenbasis für View (JSP)
•stellt View Ausschnitt des Backends-Models bereit
•enthält Request-Parameter
Backend-Model
•eigentliche Geschäftslogik und -daten
•nicht genau spezifiziert
•Verwendung verschiedenartiger Beans (Systemzustands-, Applikations-Logik-Beans)
Backend-Model
•eigentliche Geschäftslogik und -daten
•nicht genau spezifiziert
•Verwendung verschiedenartiger Beans (Systemzustands-, Applikations-Logik-Beans)
21Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Formulare I
• Abstraktion über normalen HTML-Formularen
• mehrseitige Formulare („Wizard“)
• Verifizierung übermittelter Daten in ActionForm-Bean
• Fehlermechanismen bei falscher Eingabe
Formulare und ActionForm-BeansFormulare und ActionForm-Beans
22Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Formulare II
<html:errors/>
<html:form name="logonForm" action="logon.do“ type="org.apache.struts.example.LogonForm">
<html:message key="prompt.username"/> <html:text property="username" size="16"/><br/>
<html:message key="prompt.password"/> <html:password property="password" size="16"/><br/>
<html:submit> <bean:message key="button.submit"/> </html:submit>
<html:reset> <bean:message key="button.reset"/> </html:reset></html:form>
Beispiel JSP
23Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Formulare III
import org.apache.struts.action.ActionForm;
public class LogonForm extends ActionForm{
protected String username; protected String password;
public void setUsername(String user){ username = text; }
public String getUsername(){ return username; }
public void setPassword(String pwd){ password = pwd; }
public String getPassword(){ return password; }}
Beispiel ActionForm-Bean
24Frameworks zur Implementierung von Hypertext Anwendungen
Struts – Validator/Dynaforms
• dynamische Formulare• DynFormBean: generische Getter/Setter• Deklaration in XML• Validierung mit regulären Ausdrücken
25Frameworks zur Implementierung von Hypertext Anwendungen
Struts - Fazit
• sehr übersichtlich (im Kern nicht mehr als 10 Klassen)• leicht zu verstehen• flexibel, stabil• große Freiräume für Entwickler ↔ Gefahr falscher
Implementierung
Zukunft?• wichtigstes Framework im Jakarta Projekt (Konkurrent Turbine)• Integration in JSTL• Integration in JavaServer Faces
5. Weitere Apache Frameworks
Turbine, Jetspeed, Cocoon
27Frameworks zur Implementierung von Hypertext Anwendungen
Weitere Apache Frameworks
Turbine:• seit 1999 Teil des Jakarta Projekts• erweitertes MVC: „Model 2+1“• Entwicklungsunterstützung durch:
- Service Framework Fulcrum- Java Caching System JCS- Projektverwaltungs- und Dokumentationstool Maven- objektrelationales Tool Torque
Jetspeed:• Portal-Framework, basiert auf Turbine• Entwicklung so weit wie möglich ohne Programmierung• Seitenkonzept: Portlets
Cocoon:• Portal-Framework, komplett XML-basiert• „Pipelines“-Konzept: versch. XML-Technologien
hintereinander bereiten Ausgabe auf
6. XForms
Geschichte, Ziele, Architektur, Praxis
29Frameworks zur Implementierung von Hypertext Anwendungen
XForms - Geschichte
• 1993 veröffentlicht
• ausreichend für damalige Ansprüche
Herkömmliche HTML-FormulareHerkömmliche HTML-Formulare
<form name=„LoginForm" method="post“ action="http://localhost:8080/swt/manager.UebManager"> Login: <input type="text" name="login" maxlength="12" size="12"><br> Passwort: <input type="text" name=„pwd" maxlength=“12“ size=“12"><br> <input type="submit" name="submit" value=“Einloggen"></form>
Beispiel:
Probleme:
- fehlendes getrenntes Datenmodell- Eingabe-Validierung umständlich- Initialisierung- nur „flache“ Daten (Variable/Wert-Paar)
30Frameworks zur Implementierung von Hypertext Anwendungen
XForms - Ziele
• transparente Unterstützung vieler unterschiedlichster Endgeräte:PC/Workstation, PDA, Set-Top-Box, Mobiltelefon ...
• mehrere Eingabemöglichkeiten: Text, Sprach-/Schrifterkennung
heutige Anforderungenheutige Anforderungen
Ziele von XFormsZiele von XForms
•Wiederverwendbarkeit
•Plattformunabhängigkeit
•Universalität
31Frameworks zur Implementierung von Hypertext Anwendungen
XForms - Übersicht
• kein eigenständiger Dokument-Typ• eingebettet in andere Markup-Sprachen (bspw. XHTML
2.0)• Darstellung in HTML, WML, VoiceXML ....• komplexe (hierarchische) Datenstrukturen möglich• starke Typisierung• Formular kann sich über mehrere Seiten erstrecken• nicht auf einen Request/Response-Zyklus beschränkt;
→ Autorisierungskette realisierbar
32Frameworks zur Implementierung von Hypertext Anwendungen
XForms - Architektur
• Model:XML Schema, hierarchisch, Modellierung von (dynamischen) Abhängigkeiten möglich,
• User-Interface:visuelle Darstellung, verschiedene Oberflächen für unterschiedliche Endgeräte;
• Instance-Data:konkrete, vom Client übermittelte, FormulardatenAdressierung der Elemente mit XPath,Übertragung mit XForms Submit Protocol
33Frameworks zur Implementierung von Hypertext Anwendungen
XForms – Praxis I
Beispiel-FormularBeispiel-Formular
<xforms:model> <xforms:instance> <subscription> <name/> <matrikel/> <abschluss/> </subscription> </xforms:instance> <xforms:submission action="http://localhost:8080/swt/ manager.UebManager?action=SubscribeStudent“ method="post" id="submit"/></xforms:model>
Model:
<input ref="name"> <label>Name</label></input><input ref="matrikel"> <label>Matrikel-Nr.</label></input><select1 ref="abschluss"> <label>Abschluss</label> <item> <label>Diplom</label> <value>diplom</value> </item> <item> <label>Master</label> <value>master</value> </item></select1><submit submission="submit"> <label>Einschreiben</label></submit>
Interface
<subscription> <name>Franz Matschenkow</name> <matrikel>1234567</matrikel> <abschluss>diplom</abschluss></subscription>
Instance Data:
34Frameworks zur Implementierung von Hypertext Anwendungen
XForms – Praxis II
...<subscription xmlns="de.myUniversity.myChair"> <name/> <matrikel/> <abschluss>diplom</abschluss></subscription>...
Namespaces und Standardwerte:
<xsd:schema ...>... <xsd:simpleType name="matrikel"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{7,8}"/> </xsd:restriction> </xsd:simpleType>...</xsd:schema>
Typisierung:
35Frameworks zur Implementierung von Hypertext Anwendungen
XForms - Fazit
• Nachfolger der HTML-Formulare
• flexibel, mächtig
• Lern- und Zeitaufwand?
• Tool-Unterstützung notwendig
• Browser-Unterstützung notwendig• derzeit nur serverseitige Implementierungen verwendbar:
Chiba (http://chiba.sourceforge.net)
36Frameworks zur Implementierung von Hypertext Anwendungen
Literatur
[1] H. Balzert „Lehrbuch der Software-Technologie“, 2002
[2] A. Holub „Building user interfaces for object-oriented systems“,http://www.holub.com, 1999
[3] E. Armstrong, J. Ball, S. Bodoff et al. „The J2EE 1.4 Tutorial“http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html, 2003
[4] „The Struts User’s Guide“, http://jakarta.apache.org/struts/userGuide
[5] Micah Dubinko, "XForms Essentials", O'Reilly 2003
[6] M. Dubinko, L. Klotz, R. Merrik, T. Raman „W3C Candidate Recommendation“,http://www.w3.org/TR/2002/CR-xforms-20021112/
Struts:http://jakarta.apache.org/struts
XForms:http://www.w3.org/MarkUp/Forms
Turbine:http://jakarta.apache.org/turbine
Jetspeed:http://jakarta.apache.org/jetspeed
Cocoon:http://cocoon.apache.org
Homepages:
37Frameworks zur Implementierung von Hypertext Anwendungen
Fazit
Fragen?Fragen?