Einfache Webanwendungen basierend auf Java, HTML, JSP

Werbung
Einfache Webanwendungen
basierend 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
Webanwendungen
Client-seitig
Server-seitig
http-Anfrage
Webanwendung
http-Antwort
AnwendungServer
persistente Daten
Taentzer
Modellgetriebene Softwareentwicklung
202
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.
Taentzer
Modellgetriebene Softwareentwicklung
203
Welche Aspekte von Webanwendungen
müssen modelliert werden?
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“
Taentzer
Modellgetriebene Softwareentwicklung
204
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
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
206
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
207
MySQL Workbench




zur Verwaltung der MySQL-Umgebung
Benutzerverwaltung mit Zugriffsrechten
Wartung der Datenbank
In Server Administration -> Accounts
Taentzer
Modellgetriebene Softwareentwicklung
208
Überblick über Datenschemata
und Tabelleninhalt
Taentzer
Modellgetriebene Softwareentwicklung
209
Eine kleine Einführung in SQL
 Anfragesprache für relationale Datenbanken
 Aufbau einer SQL-Anfrage:





SELECT
FROM
WHERE
GROUP BY
ORDER BY
Auswahl der Attribute
Tabellenname(n)
Bedingungen für die Auswahl (optional)
Gruppieren der Ergebnisse (optional)
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
Taentzer
Modellgetriebene Softwareentwicklung
210
Hibernate Annotations
 O/R-Mapping innerhalb von Java-Klassen
(Entitätsklassen)
 Ähnliche, aber detailliertere Angaben als in EMFModellen -> integriertes Modell
 Dokumentation:
 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/
html/index.html
Taentzer
Modellgetriebene Softwareentwicklung
211
Hibernate Annotation:
Initialisierung
Alternativ kann die Deklaration der annotierten Klassen auch direkt auf
der SessionFactory in HibernateUtil.java programmiert werden.
Taentzer
Modellgetriebene Softwareentwicklung
212
O/R-Mapping über Annotationen
Mögliche Annotationen:
@Entity – Entität induziert Tabelle
@Id – Primärschüssel
@GeneratedValue – Schlüsselgenerierung
@Table – explizite
Tabellendefinition
@Version – zur Erkennung von
konfliktbehafteten Änderungen
@Column - Spaltendefinition
@Inheritance – Vererbung:
strategy= TABLE_PER_CLASS,
JOINED, SINGLE_TABLE
Taentzer
Modellgetriebene Softwareentwicklung
213
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
214
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 Daten
aus „java.sun.com“
Taentzer
Modellgetriebene Softwareentwicklung
215
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.
Taentzer
Modellgetriebene Softwareentwicklung
216
Eine DAO-Klasse
Taentzer
Modellgetriebene Softwareentwicklung
217
Hibernate: Zugriff auf die
SessionFactory
HibernateUtil.java:
Taentzer
Modellgetriebene Softwareentwicklung
218
Welche Aspekte von Webanwendungen
müssen modelliert werden?
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“
Taentzer
Modellgetriebene Softwareentwicklung
219
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
Model-View-Controller-Architektur
aus „publib.boulder.ibm.com“
Taentzer
Modellgetriebene Softwareentwicklung
221
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
Java Server Pages (JSP)
JSP: eine Art Template-Sprache
JSP-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
Taentzer
Modellgetriebene Softwareentwicklung
224
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
WorkshopIndex.jsp:
Taentzer
Modellgetriebene Softwareentwicklung
228
Definition von Formularen in HTML
 Formular: <form>
 action: URI zur
Verarbeitung der
Formulardaten
 method: get| post
 name: Formularname
 Eingabeelement: <input>
 name: Name des Elements
 type: Typ des Elements
 value: Wert des Elements
 Label: <label>
 for: Eingabeelement
Verstecktes
Element
StandardButton
Taentzer
Modellgetriebene Softwareentwicklung
229
Definition von Formularen in HTML (2)
Text-Element
Taentzer
Modellgetriebene Softwareentwicklung
230
Servlets und JSP: Best Practices
 Nicht zu viel Java in HTML-Seiten, besser separate JavaKlassen
 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 ModelView-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
Herunterladen