Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL 21. November 2012 Taentzer Modellgetriebene Softwareentwicklung 200
Einfache Webanwendungenbasierend auf Java, HTML, JSP,
Hibernate Annotations und MySQL 21. November 2012
Taentzer Modellgetriebene Softwareentwicklung 200
Überblick
Unsere Referenzanwendung: eine simple Webanwendung für eine Konferenz
Verwendete Technologien: Anwendung: Java, HTML, Java Server Pages, Hibernate
Annotation, MySQL Anwendungsserver: Jboss
Vorstellung der Plattform: Datenhaltung in einer MySQL-Datenbank O/R-Mapping durch Hibernate Annotations Wie erstellt man dynamische Webseiten?
Taentzer Modellgetriebene Softwareentwicklung 201
Taentzer Modellgetriebene Softwareentwicklung 202
Webanwendungen
Client-seitig Server-seitig
Anwendung-Server
http-Anfrage
http-Antwort
Web-anwendung
persistente Daten
Taentzer Modellgetriebene Softwareentwicklung 203
Funktionsablauf
Benutzer startet Webanwendung, gibt die URL des Webanwendung ein.
Anwendung-Server leitet die Anfrage an die Webanwendung weiter.
Webanwendung generiert den HTML-Code einer Webseite, die vom Anwendung-Server an den Browser des Benutzers zurückgeschickt wird.
Browser zeigt die erhaltene Webseite an.
Welche Aspekte von Webanwendungen müssen modelliert werden?
Taentzer Modellgetriebene Softwareentwicklung 204
Präsentationsschicht: Wie soll die Weboberfläche
aussehen? Welche Daten sollen an der
Oberfläche angezeigt werden? Services: Welche Services haben wir? Wie sind die Services definiert?Datenzugriffsschicht: Welche Datenstrukturen werden
verwendet?Datenbankschicht: Welche Daten soll persistent sein? Wie sollen die Daten in der
Datenbank gespeichert werden?aus „AndroMDA.org“
Aufbau einer Webanwendung Konfigurationsdaten:
WebContent\WEB-INF
Präsentation: WebContent: JSP-Seiten Webcontent/styles: CSS-Styles
Servlets: src/(default package)
Datenhaltung: src/daos: CRUD-Operationen src/entities: Entitätsklassen
Taentzer Modellgetriebene Softwareentwicklung 205
Taentzer Modellgetriebene Softwareentwicklung 206
MySQL Managementsystem für relationale Datenbanken frei verfügbar, plattformunabhängig Anfragesprache: SQL Client-Server-System:
Server: Datenbanksystem, das Datenbanken verwaltet und Anfragen zum Inhalt seiner Datenbanken bearbeitet (z.B. MySQL)
Client: Anwendung, die eine Datenbank verwendet Eigenschaften:
Mehrbenutzersystem mehrere Threads Verwaltung von Zugriffsberechtigungen
Taentzer Modellgetriebene Softwareentwicklung 207
Datenbankschema
beschreibt die Struktur einer Datenbank Menge von Tabellen Beispiel: Tabelle Vorlesung
Tabellenspalten (Datenfelder): Nummer, Titel, Raum, Dozent Tabellenzeilen: einzelne Datensätze
(L123, „Software-Praktikum“, D12,..)
Beziehungen zwischen Tabellen: durch Schlüssel
Vorlesung: (L123, „Software-Praktikum“, D12, 1)Dozent: (1, „Meier“, „Hans“)
Taentzer Modellgetriebene Softwareentwicklung 208
MySQL Workbench zur Verwaltung der MySQL-Umgebung Benutzerverwaltung mit Zugriffsrechten Wartung der Datenbank In Server Administration -> Accounts
Überblick über Datenschemataund Tabelleninhalt
Taentzer Modellgetriebene Softwareentwicklung 209
Taentzer Modellgetriebene Softwareentwicklung 210
Eine kleine Einführung in SQL Anfragesprache für relationale Datenbanken Aufbau einer SQL-Anfrage:
SELECT Auswahl der Attribute FROM Tabellenname(n) WHERE Bedingungen für die Auswahl (optional) GROUP BY Gruppieren der Ergebnisse (optional) ORDER BY Reihenfolge der Ausgaben (optional)
Ergebnis wird als Tabelle zurückgegeben. SQL Anfragen können im MySQL Query Browser
gestellt werden. Auch zum Einfügen und Löschen von Datensätzen
INSERT und DELETE
Hibernate Annotations
O/R-Mapping innerhalb von Java-Klassen (Entitätsklassen)
Ähnliche, aber detailliertere Angaben als in EMF-Modellen -> integriertes Modell
Dokumentation: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/
html/index.html
Taentzer Modellgetriebene Softwareentwicklung 211
Hibernate Annotation: Initialisierung
Taentzer Modellgetriebene Softwareentwicklung 212
Alternativ kann die Deklaration der annotierten Klassen auch direkt auf der SessionFactory in HibernateUtil.java programmiert werden.
O/R-Mapping über Annotationen
Mögliche Annotationen:@Entity – Entität induziert Tabelle@Id – Primärschüssel@GeneratedValue – Schlüssel-generierung@Table – explizite Tabellendefinition@Version – zur Erkennung von konfliktbehafteten Änderungen@Column - Spaltendefinition@Inheritance – Vererbung:
strategy= TABLE_PER_CLASS, JOINED, SINGLE_TABLE
Taentzer Modellgetriebene Softwareentwicklung 213
Taentzer Modellgetriebene Softwareentwicklung 214
Datenzugriffsobjekte Data Access Object (DAO) Der Datenzugriff kann je nach Speichermedium stark variieren. Ziel: Kapselung der Zugriffe auf ein Speichermedium Speziell: Entkopplung einer Anwendung vom Datenbankzugriff
aus „java.sun.com“
Taentzer Modellgetriebene Softwareentwicklung 215
Datenzugriffsobjekte BusinessObject:
Datenkunde fordert Daten an
DataAccessObject: Zugriffsschnittstelle abstrahiert von der
unterliegenden Datenimplementierung
DataSource: die eigentliche
Datenquelle Datenbank, Datei,...
TransferObject: Datenträger zum
Übertragen von Datenaus „java.sun.com“
Taentzer Modellgetriebene Softwareentwicklung 216
Eigenschaften der Datenzugriffsschicht
ermöglicht Transparenz Services und Controller müssen nichts über die eigentliche
Datenhaltung wissen. ermöglicht leichtere Migration
Die Datenhaltung kann geändert werden. reduziert die Codekomplexität in Service- und
Controllerklassen fasst jeglichen Datenzugriff in eine separate Ebene
zusammen Die zusätzliche Ebene muss entworfen und implementiert
werden. Sie kann auch automatisch generiert werden.
Eine DAO-Klasse
Taentzer Modellgetriebene Softwareentwicklung 217
Hibernate: Zugriff auf die SessionFactory
Taentzer Modellgetriebene Softwareentwicklung 218
HibernateUtil.java:
Welche Aspekte von Webanwendungen müssen modelliert werden?
Taentzer Modellgetriebene Softwareentwicklung 219
Präsentationsschicht: Wie soll die Weboberfläche
aussehen? Welche Daten sollen an der
Oberfläche angezeigt werden? Services: Welche Services haben wir? Wie sind die Services definiert?Datenzugriffsschicht: Welche Datenstrukturen werden
verwendet?Datenbankschicht: Welche Daten soll persistent sein? Wie sollen die Daten in der
Datenbank gespeichert werden?aus „AndroMDA.org“
Konfiguration einer Webanwendung
Konfigurationsdaten: <Hauptverzeichnis>\WEB-INF
Konfigurationsdatei: web.xml folgt einem festen Schema <servlet>: Beschreibung der
beteiligten Servlets <servlet-mapping>: Einem
deklarierten Servlet wird ein URL-Pattern zugeordnet. (Zur Suche eines passenden Servlets.)
<filter> können bei der Request-Verarbeitung vor Servlets geschaltet werden.
Taentzer Modellgetriebene Softwareentwicklung 220
Taentzer Modellgetriebene Softwareentwicklung 221
Model-View-Controller-Architektur
aus „publib.boulder.ibm.com“
Einfache Servlets Ein Servlet ist eine Java-Klasse, die zur Steuerung einer
Webanwendung mit Hilfe des Request-Response-Models eingesetzt wird.
Das Servlet WorkshopIndexServlet erweitert die Klasse HttpServlet.
Für einfache Anfragen wird die Methode doGet() überschrieben. Die Methode doPost() wird überschrieben, wenn auch andere
Aktionen (Daten ändern, E-Mail versenden, etc.) durchgeführt werden.
Das Objekt vom Typ HttpServletRequest erlaubt den Zugriff auf die Informationen zur Anfrage (URL, Cookies usw.).
Das Objekt vom Typ HttpServletResponse dient zum Erstellen der Antwort.
Dokumentation: http://docs.oracle.com/javaee/1.4/tutorial/doc
Taentzer Modellgetriebene Softwareentwicklung 222
Beispiel:PaperIndexServlet.java
Taentzer Modellgetriebene Softwareentwicklung 223
Taentzer Modellgetriebene Softwareentwicklung 224
Java Server Pages (JSP)JSP: eine Art Template-SpracheJSP-Seite: ein Textdokument mit zwei Arten von Text (ein Template):
statische Daten, die in HTML formuliert sind, und JSP Elemente, die dynamischen Inhalt darstellen. Die Seite kann aus einer obersten Datei, die weitere Dateien
enthält, bestehen. Diese sind entweder komplette JSP- Seiten oder JSP-Fragmente.
dynamischer Inhalt: Java-Code oder spezielle JSP-Aktionen, sogenannten Scriptlets (in
Java geschrieben) Expliziter durch die Verwendung von Tag-Libraries
JSP-Dokumentation: http://java.sun.com/products/jsp/docs.html
Scriptlet
Enthält ein Code-Fragement, womit dynamische Inhalte produziert werden können.
JSP-Syntax: <% code fragment %> oder <jsp:scriptlet> code fragement </jsp:scriptlet> Ein Scriptlet kann beliebig viele Statements, Variablen, Ausdrücke oder
Methodendeklarationen enthalten.
Einsatzmöglichkeiten: z.B. Variablendeklaration für spätere Nutzung Verwendung von impliziten Objekten (wie session, request,
response, etc.) Ausdrücke: <%= expression %> zu String konvertiert (ohne „;“)
Taentzer Modellgetriebene Softwareentwicklung 225
JSP-Direktiven: Eine Auswahl Page: Attribute für die gesamte JSP-Seite
Syntax: <%@ page attributes %> Beispiel: <%@ page contentType="text/html" pageEncoding="UTF-8"%>
Taglib: Angabe einer Tag-Bibliothek mit Präfix für verwendete Tags Syntax: <%@ taglib {uri="URI" | tagdir="/WEB-INF/tags[/subdir]+"}
prefix="tagPrefix" %> Beispiel: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Include: zum Einfügen anderer JSP-Seiten Syntax: <%@ include file="relativeURL" %> Beispiel: …The current date and time are
<%@ include file="date.jsp" %>…date.jsp: <%@ page import="java.util.*" %>
<%= (new java.util.Date() ).toLocaleString() %>
Taentzer Modellgetriebene Softwareentwicklung 226
JSP: Verwendung der Core-Tags Statt:<% Collection<Workshop> workshop =
(Collection<Workshop>) request.getAttribute(„Workshop");for (w : workshop) { %>
<tr><td><%= w.getAbbreviation() %></td><td><%= w.getName() %></td></tr>
<% } %>
Besser:<c:forEach items="${WorkshopEntries}" var=“Workshop" ><tr><td><c:out value='${Workshop.abbreviation}' default="-"/></td><td><c:out value='${Workshop.name}'/></td></tr></c:forEach>
Taentzer Modellgetriebene Softwareentwicklung 227
Beispiel: JSP zur Anzeige von Datenbankeinträgen
Taentzer Modellgetriebene Softwareentwicklung 228
WorkshopIndex.jsp:
Definition von Formularen in HTML Formular: <form>
action: URI zur Verarbeitung der Formulardaten
method: get| post name: Formularname
Taentzer Modellgetriebene Softwareentwicklung 229
Eingabeelement: <input> name: Name des Elements type: Typ des Elements value: Wert des Elements
Label: <label> for: Eingabeelement
Verstecktes Element
Standard-Button
Definition von Formularen in HTML (2)
Taentzer Modellgetriebene Softwareentwicklung 230
Text-Element
Servlets und JSP: Best Practices
Nicht zu viel Java in HTML-Seiten, besser separate Java-Klassen
Include-Mechanismus benutzen: statische Teile wie Header separat halten
Kein Mix von Anwendungs- und Präsentationscode: Wiederverwendbare Komponenten Leichte Änderbarkeit der Präsentation
Verwendung von Custom-Tags: Weniger Java Code, mehr HTML-artige Syntax Scriptlets sind nicht wiederverwendbar.
Taentzer Modellgetriebene Softwareentwicklung 231
Zusammenfassung
Erstellung von dynamischen Webseiten nach Model-View-Controller-Prinzip Model: Entitäten und DAOs Controller: Servlets View: Java Server Pages
Kein Mix von Anwendungs- und Präsentationscode Klare Trennung von Controller und Views Wiederverwendbare Komponenten Leichte Änderbarkeit der Präsentation
O/R-Mapping durch Hibernate Annotations Implizite Modelle
Taentzer Modellgetriebene Softwareentwicklung 232