Transcript Frameworks

Frameworks zur Implementierung von
Hypertext Anwendungen
Thorsten Berger
Diplomstudiengang Informatik
5. Semester
Ein Vortrag im Rahmen des Problemseminars
„Neue Entwicklungen in der Telematik“
Universität Leipzig
Lehrstuhl für angewandte Telematik / e-Business
Prof. Dr. Volker Gruhn
Dr. Sami Beydeda
26. Januar 2004
Übersicht
1.
2.
3.
4.
5.
6.
Einleitung, Definitionen
Grundlagen
Struts
Weitere Apache Frameworks
XForms
Literatur
Frameworks zur Implementierung von Hypertext Anwendungen
2
1. Einführung / Definition
Hypertext-Anwendung, Framework
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
Frameworks zur Implementierung von Hypertext Anwendungen
4
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
Frameworks zur Implementierung von Hypertext Anwendungen
5
2. Grundlagen
CGI, Server Extensions, Server Scripting,
Servlet API, Modelle und Architekturen
CGI, Server-Extensions
CGI – Interface zwischen WebServer und Anwendung
C
l
i
e
n
t
Request
Response
S
e
r
v
e
r
„fork“
Ausgabe
(HTML)
A
n
w
e
n
d
u
n
g
Server Extensions:
•
•
WebServer-spezifische API
z.B. Netscape NSAPI, Microsoft ISAPI, Apache Module
Frameworks zur Implementierung von Hypertext Anwendungen
7
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
Frameworks zur Implementierung von Hypertext Anwendungen
8
2.1. Modelle und Architekturen
Multi-Tier, Model 1, MVC
Multi-Tier
„Multi-Tier“-Architektur (Quelle: SUN)
Frameworks zur Implementierung von Hypertext Anwendungen
10
MVC
+ 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
MVC – Modell (Quelle: SUN)
• OO-Framework zur GUI-Entwicklung
• ursprünglich Verwendung in Smalltalk-80 am Xerox PARC
Frameworks zur Implementierung von Hypertext Anwendungen
11
SUN – Model 1, Model 2
Model 1
C
l
i
e
n
t
Request
JSP
Response
Bean
Container / Middle Tier
EIS Tier
Model 2
C
l
i
e
n
t
Request
Response
Controller
Servlet
View
JSP
Container / Middle Tier
Frameworks zur Implementierung von Hypertext Anwendungen
Model
Bean
EIS Tier
12
3. Struts
Übersicht, Controller, View, Model, Formulare,
Validator
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
Frameworks zur Implementierung von Hypertext Anwendungen
14
Struts – Übersicht III
Container / WebServer
Client
Request
View
Response
struts-config.xml
init
JavaServerPage
JavaServerPage
JavaServerPage
ActionServlet
FormBean
FormBean
FormBean
Controller
Action
Action
Action
Frontend-Model
Applikationslogik / Back-End-Model
Frameworks zur Implementierung von Hypertext Anwendungen
15
Struts – Controller I
ActionServlet – 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>
Frameworks zur Implementierung von Hypertext Anwendungen
16
Struts – Controller II
Actions
Einstiegspunkt:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
Ablauf:
• aktuelle User-Session validieren
• Validierung gesendeter Formular-Daten (vs. ActionForm-Bean)
• Ausführung Applikationslogik
• Aktualisierung verschiedener Session-/Request-Beans
• Rückgabe eines ActionForward
- nur eine Instanz für alle Requests
Thread-Sicherheit gefordert!
- Applikationslogik vermeiden!
Frameworks zur Implementierung von Hypertext Anwendungen
17
Struts – View I
Internationalisierung (i18n)
•
•
•
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>
Frameworks zur Implementierung von Hypertext Anwendungen
18
Struts – View II
Struts Tag-Set
•
•
•
•
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
Benutzung einer Bean:
<jsp:useBean id=“cart“ scope=“request“ class=“com.mycompany.MyApp.MyCart“/>
Frameworks zur Implementierung von Hypertext Anwendungen
19
Struts – Model I
Model
Frontend-Model
•ActionForm-Beans
•Datenbasis für View (JSP)
•stellt View Ausschnitt des
Backends-Models bereit
•enthält Request-Parameter
Frameworks zur Implementierung von Hypertext Anwendungen
Backend-Model
•eigentliche Geschäftslogik und daten
•nicht genau spezifiziert
•Verwendung verschiedenartiger
Beans (Systemzustands-,
Applikations-Logik-Beans)
20
Struts – Formulare I
Formulare und ActionForm-Beans
•
•
•
•
Abstraktion über normalen HTML-Formularen
mehrseitige Formulare („Wizard“)
Verifizierung übermittelter Daten in ActionForm-Bean
Fehlermechanismen bei falscher Eingabe
Frameworks zur Implementierung von Hypertext Anwendungen
21
Struts – Formulare II
Beispiel JSP
<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>
Frameworks zur Implementierung von Hypertext Anwendungen
22
Struts – Formulare III
Beispiel ActionForm-Bean
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;
}
}
Frameworks zur Implementierung von Hypertext Anwendungen
23
Struts – Validator/Dynaforms
•
•
•
•
dynamische Formulare
DynFormBean: generische Getter/Setter
Deklaration in XML
Validierung mit regulären Ausdrücken
Frameworks zur Implementierung von Hypertext Anwendungen
24
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
Frameworks zur Implementierung von Hypertext Anwendungen
25
5. Weitere Apache Frameworks
Turbine, Jetspeed, Cocoon
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
Frameworks zur Implementierung von Hypertext Anwendungen
27
6. XForms
Geschichte, Ziele, Architektur, Praxis
XForms - Geschichte
Herkömmliche HTML-Formulare
•
•
1993 veröffentlicht
ausreichend für damalige Ansprüche
Beispiel:
<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>
Probleme:
- fehlendes getrenntes Datenmodell
- Eingabe-Validierung umständlich
- Initialisierung
- nur „flache“ Daten (Variable/Wert-Paar)
Frameworks zur Implementierung von Hypertext Anwendungen
29
XForms - Ziele
heutige Anforderungen
•
•
transparente Unterstützung vieler unterschiedlichster Endgeräte:
PC/Workstation, PDA, Set-Top-Box, Mobiltelefon ...
mehrere Eingabemöglichkeiten: Text, Sprach-/Schrifterkennung
Ziele von XForms
•Wiederverwendbarkeit
•Plattformunabhängigkeit
•Universalität
Frameworks zur Implementierung von Hypertext Anwendungen
30
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
Frameworks zur Implementierung von Hypertext Anwendungen
31
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, Formulardaten
Adressierung der Elemente mit XPath,
Übertragung mit XForms Submit Protocol
Frameworks zur Implementierung von Hypertext Anwendungen
32
XForms – Praxis I
Beispiel-Formular
Model:
<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>
Instance Data:
<subscription>
<name>Franz Matschenkow</name>
<matrikel>1234567</matrikel>
<abschluss>diplom</abschluss>
</subscription>
Frameworks zur Implementierung von Hypertext Anwendungen
Interface
<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>
33
XForms – Praxis II
Namespaces und Standardwerte:
...
<subscription xmlns="de.myUniversity.myChair">
<name/>
<matrikel/>
<abschluss>diplom</abschluss>
</subscription>
...
Typisierung:
<xsd:schema ...>
...
<xsd:simpleType name="matrikel">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{7,8}"/>
</xsd:restriction>
</xsd:simpleType>
...
</xsd:schema>
Frameworks zur Implementierung von Hypertext Anwendungen
34
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)
Frameworks zur Implementierung von Hypertext Anwendungen
35
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/
Homepages:
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
Frameworks zur Implementierung von Hypertext Anwendungen
36
Fazit
Fragen?
Frameworks zur Implementierung von Hypertext Anwendungen
37