33
Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL 21. November 2012 Taentzer Modellgetriebene Softwareentwicklung 200

Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Einfache Webanwendungenbasierend auf Java, HTML, JSP,

Hibernate Annotations und MySQL 21. November 2012

Taentzer Modellgetriebene Softwareentwicklung 200

Page 2: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Ü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

Page 3: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Taentzer Modellgetriebene Softwareentwicklung 202

Webanwendungen

Client-seitig Server-seitig

Anwendung-Server

http-Anfrage

http-Antwort

Web-anwendung

persistente Daten

Page 4: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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.

Page 5: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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“

Page 6: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 7: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 8: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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“)

Page 9: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Taentzer Modellgetriebene Softwareentwicklung 208

MySQL Workbench zur Verwaltung der MySQL-Umgebung Benutzerverwaltung mit Zugriffsrechten Wartung der Datenbank In Server Administration -> Accounts

Page 10: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Überblick über Datenschemataund Tabelleninhalt

Taentzer Modellgetriebene Softwareentwicklung 209

Page 11: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 12: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 13: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Hibernate Annotation: Initialisierung

Taentzer Modellgetriebene Softwareentwicklung 212

Alternativ kann die Deklaration der annotierten Klassen auch direkt auf der SessionFactory in HibernateUtil.java programmiert werden.

Page 14: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 15: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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“

Page 16: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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“

Page 17: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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.

Page 18: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Eine DAO-Klasse

Taentzer Modellgetriebene Softwareentwicklung 217

Page 19: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Hibernate: Zugriff auf die SessionFactory

Taentzer Modellgetriebene Softwareentwicklung 218

HibernateUtil.java:

Page 20: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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“

Page 21: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 22: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Taentzer Modellgetriebene Softwareentwicklung 221

Model-View-Controller-Architektur

aus „publib.boulder.ibm.com“

Page 23: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 24: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Beispiel:PaperIndexServlet.java

Taentzer Modellgetriebene Softwareentwicklung 223

Page 25: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 26: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 27: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 28: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 29: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Beispiel: JSP zur Anzeige von Datenbankeinträgen

Taentzer Modellgetriebene Softwareentwicklung 228

WorkshopIndex.jsp:

Page 30: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 31: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

Definition von Formularen in HTML (2)

Taentzer Modellgetriebene Softwareentwicklung 230

Text-Element

Page 32: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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

Page 33: Einfache Webanwendungen basierend auf Java, HTML, JSP ...swt/ws12/mdd/files/Folien121121.pdf · Einfache Webanwendungen basierend auf Java, HTML, JSP, Hibernate Annotations und MySQL

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