PROG O RAMMIE MMI RPROJ O EKT K

Ähnliche Dokumente
PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN

Webbasierte Informationssysteme

Klausur Datenbanken II

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Webbasierte Informationssysteme

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

1a) SQL Stored Procedure via IDs

Play Framework, MySQL, JPA, HQL, HTML, jquery,

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

MySQL, Java und einiges mehr

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Datenbanksysteme 2011

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

Oracle & Java HOW TO

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6

Datenbanken SQL. Insert, Update, Delete, Drop. Krebs

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Willkommen. Datenbanken und Anbindung

Java: MySQL-Anbindung mit JDBC.

Die Anweisung create table

Multimedia im Netz Wintersemester 2012/13

Entwicklung einer Webseite zur Verwaltung von Prüfungsterminen

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Lambda Expressions in Java 8

Datenverwaltung Darstellung Interaktion. WebPoint. Ein Framework zur Erstellung von webbasierten Verkaufsanwendungen. Torsten Walter. 10.

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Vorlesung Informatik II

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Oracle: Abstrakte Datentypen:

Datenbanken SQL JDBC. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 21

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Datenbanksysteme 2013

Oracle 10g Einführung

Multimedia im Netz Wintersemester 2013/14. Übung 03 (Nebenfach)

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Multimedia im Netz Wintersemester 2013/14. Übung 02 (Hauptfach)

Datenbank und Tabelle mit SQL erstellen

C++ Anwendungskurs Tag 4: Datenbanken Daniela Horn Institut für Neuroinformatik Real-time Computer Vision

Inhaltsverzeichnis. Einleitung

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Java - Webapplikationen

Webanwendungen mit Java und JavaServerPages

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Übung ERM. Beispiel: Erstellung einer relationalen Datenbank

Garten - Daten Bank. - survival pack -

Modifikation der Datenbank

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

Introduction to Data and Knowledge Engineering. 6. Übung SQL

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

Kapitel DB:VI (Fortsetzung)

Kapitel 8: Datenintegrität

JDBC. Java DataBase Connectivity

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

Contentmanagement. Dipl.- Inf. Benjamin Bock Topic Maps Lab, Universität Leipzig leipzig.de. Schlüsselqualifika6on 10

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Java Database Connectivity-API (JDBC)

Fifty Shades of Red. Oder wie man es schafft, dass Entwickler (endlich) unter Ihrer eigenen (schlechten) Software leiden müssen

12. Datenschutz: Zugriffsrechte in SQL Datenschutz: Zugriffsrechte in SQL

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

Java Database Connectivity-API (JDBC)

Software- /Systemarchitektur

JDBC. Allgemeines ODBC. java.sql. Beispiele

Datenschutz: Zugriffsrechte in SQL

Gruppe A Bitte tragen Sie sofort und leserlich Namen, Studienkennzahl und Matrikelnummer ein und legen Sie Ihren Studentenausweis

Native Queries Datenbankabfragen in reinem Java. Carl Rosenberger Chief Software Architect, db4objects Inc. Java Forum Stuttgart 2006, 6.

Klausur: Java (Liste P)

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks

Datenbanken & Informationssysteme Übungen Teil 1

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Einführung in die Programmierung

Praktische SQL-Befehle 2

Client/Server-Programmierung

Entwicklungsumgebung für die Laborübung

Musterlösung Übungsblatt 11

Praktische SQL-Befehle

GML und Bibliothek oracle.sdoapi

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Teil 2: Weitere Aspekte der Objektorientierung

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Daten-Definitionssprache (DDL) Bisher: Realwelt -> ERM -> Relationen-Modell -> normalisiertes Relationen-Modell. Jetzt: -> Formulierung in DDL

Transkript:

PROGRAMMIERPROJEKT 2018 WEB ANWENDUNGEN Dr. Annette Bieniusa

ÜBERBLICK Was ist eine Web- Anwendung? Model-View-Controller Pattern Umsetzung für unser Projekt Spark SQL SQL in Java

WEB ANWENDUNG

HTML ist ein Format um Inhalte einer Seite zu beschreiben Inhalte grundsätzlich statisch CSS erlaubt Gestaltung der Inhalte, hauptsächlich statisch JavaScript erlaubt dynamische Änderungen am HTML Aber: Kein direkter Austausch von Informationen zwischen Benutzern möglich

Web-Anwendungen laufen auf Servern und kommunizieren mit dem Browser des Benutzers Austausch von Informationen zwischen Benutzern möglich Server speichert Informationen zur weiteren Verwendung Client Server Prinzip

KLASSISCHE SICHT Server erzeugt HTML und sendet es an den Browser Browser zeigt HTML dem Benutzer an Benutzer gibt Informationen in den Browser ein Browser sendet Informationen an den Server Empfangene Informationen können in Generierung der HTML-Seite eingehen

Server Database Templates Files GET /index 200 <html>...</html> POST /login username=... password=... Client (Browser) Login please User Password Login

MODERNE SICHT Server stellt Daten als Service zur Verfügung (z.b. REST-Services) Browser verarbeitet Daten mit Hilfe von JavaScript Anwendungen (z.b. AngularJS) Wir verwenden hier die klassische Sicht!

MODEL VIEW CONTROLLER

Muster zur Strukturierung von Software Architekturmuster Entwurfsmuster Wiederverwendbarkeit von Komponenten Bsp.: Austausch der GUI (hier: des HTML-Codes)

Model Daten und evtl. Programmlogik wird dargestellt in verändert View Controller Präsentation und Benutzerinteraktion Steuerung der View, Bearbeitung der Benutzereingaben

ZUORDNUNG VON FUNKTIONALITÄT Geschäfts-/Programmlogik sollte Teil des Modells sein Testbarkeit! Validierung von Benutzereingaben Einfache Überprüfungen des Formats: View/Controller Komplexere Überprüfungen: Modell Daten-Formatierung (z.b. Datumsformat) Für unser Projekt: meist Controller

SPARK

WAS IST SPARK? Framework zur Erstellung von Web-Anwendungen in Java Einfach zu verwenden Integrierter Webserver

WIE FUNKTIONIERT SPARK? 1. Web-Anwendung bekommt Anfrage (engl. request) auf eine URL 2. Aufruf einer Java-Methode, welche HTML als String erzeugt 3. HTML wird (mit zusätzlichen Meta-Daten) als Antwort (engl. response) zurückgeschickt

import static spark.spark.*; import spark.*; public class Main { public static void main(string[] args) { get("/hello", new Route() { @Override public Object handle(request request, Response response) throws Exception { return "Hallo Welt!"; } }); } } Anfragen an /hello werden durch die handle Methode behandelt und geben Hallo Welt! zurück.

In Java 8 kann der Code zu import static spark.spark.*; import spark.*; public class Main { public static void main(string[] args) { get("/hello", (request, response) -> "Hallo Welt!"); } } verkürzt werden.

Auch Einfügen von dynamischen Inhalten möglich: get("/hello", (request, response) -> { Date now = new Date(); DateFormat dateformat = SimpleDateFormat.getDateInstance(); DateFormat timeformat = SimpleDateFormat.getTimeInstance(); return "<h1>hallo Welt!</h1>" + "<p>datum: " + dateformat.format(now) + " Uhrzeit: " + timeformat.format(now) + "</p>"; });

Mehr Informationen zu Spark, insbesondere zu den Themen Welche Methoden gibt es auf Request? Welche Methoden gibt es auf Response? Wie erzeuge und lese ich Cookies? Wie verwalte ich eine Session? Wie leite ich auf eine andere Seite um? unter http://sparkjava.com/documentation.html

HTML TEMPLATES

HTML-Strings im Java Code werden schnell unübersichtlich Trennung zwischen HTML und Code erwünscht wegen Editorunterstützung Einfacher Vorschau Möglichkeiten der Kooperation

TEMPLATE ENGINES Template (z.b. HTML-Datei) mit Platzhaltern Engine nimmt Template und "Modell" und füllt Platzhalter Template in separater Datei und Modell kann in Java erzeugt werden Wir verwenden hier Mustache.

In Datei hello.mustache: <html> <head> <title>hallo</title> </head> <body> <h1>hallo Welt!</h1> <p>datum: {{datum}} Zeit: {{zeit}}</p> </body> </html>

In der main-methode: get("/hello", (request, response) -> { Map<String, Object> modell = new HashMap<>(); Date now = new Date(); DateFormat dateformat = SimpleDateFormat.getDateInstance(); DateFormat timeformat = SimpleDateFormat.getTimeInstance(); modell.put("datum", dateformat.format(now)); modell.put("zeit", timeformat.format(now)); return new ModelAndView(modell, "hello.mustache"); }, new MustacheTemplateEngine());

Man kann auch auf Attribute eines Objekts zugreifen: public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getname() { return this.name; } public int getage() { return this.age; }... } // in get modell.put("myperson", new Person("Hans", 45)); Im Template:... {{myperson.name}} ist {{myperson.age}}...

Über Listen kann iteriert werden: // in get List<String> personen = new ArrayList<>(); personen.add("julia"); personen.add("maria"); personen.add("herbert"); modell.put("personen", personen); Template: {{#personen}} - {{.}} {{/personen}} Ausgabe: - Julia - Maria - Herbert

Bedingte Formatierung: Map<String, Object> model = new HashMap<>(); model.put("deutsch?", true);... Template: {{#deutsch?}} <h1>hallo Welt!</h1> {{/deutsch?}} {{^deutsch?}} <h1>hello World!</h1> {{/deutsch?}} Ausgabe: <h1>hallo Welt!</h1>

Weitere ausführliche Informationen zu Mustache finden Sie auf der Homepage unter http://mustache.github.io/ und in der Spezifikation https://github.com/mustache/spec

SQL

RELATIONALE DATENBANKEN Ermöglicht Speichern von Daten einer Anwendung Einteilung der Daten in Relationen (Tupel von Attributen) Abspeichern der Relationen in Tabellen Nur atomare Attribute in der Tabelle Primärschlüssel zur eindeutigen Identifikation einer Zeile

MatrikelNr Vorname Nachname 367891 Paul Muster 378912 Horst Müller 389123 Lisa Schmidt Attribute: MatrikelNr, Vorname, Nachname Primärschlüssel: MatrikelNr Typen MatrikelNr: Zahlen Vorname und Nachname: Zeichenketten

TABELLE ANLEGEN CREATE TABLE studenten (MatrikelNr INT PRIMARY KEY, Vorname CHAR(100), Nachname CHAR(100)) CREATE TABLE erzeugt eine Tabelle PRIMARY KEY markiert den Primärschlüssel INT steht für ganze Zahlen, CHAR(100) für Zeichenketten mit maximaler Länge 100

EINFÜGEN VON WERTEN INSERT INTO studenten (MatrikelNr, Vorname, Nachname) VALUES ( 367891, 'Paul', 'Muster' ) Man kann die Liste der Attribute weglassen, wenn man die Werte in der Reihenfolge der Attribute angibt.

LESEN VON WERTEN SELECT Vorname, Nachname FROM studenten WHERE MatrikelNr = 367891 Mit SELECT * kann auch das gesamte Tupel ausgelesen werden. Nicht auf Primärschlüssel beschränkt (z.b. WHERE Vorname='Heinz' AND Nachname='Müller'). Ergebnis kann auch mehrere Tupel umfassen.

LÖSCHEN VON TUPELN DELETE FROM studenten WHERE MatrikelNr = 367891 ÄNDERN VON TUPELN UPDATE studenten SET Vorname = 'Heinz' WHERE MatrikelNr = 367891

VERBINDEN VON TABELLEN MatrikelNr Vorlesung Note 389123 SE1 2,3 389123 Logik 4,0 Ergebnisse von Studenten Nur gültig falls Student vorhanden CREATE TABLE ergebnisse ( MatrikelNr INT, Vorlesung CHAR(100), Note CHAR(10), FOREIGN KEY (MatrikelNr) REFERENCES studenten )

ZUSAMMENFÜGEN BEIM AUSLESEN SELECT S.MatrikelNr, S.Vorname, S.Nachname, ER.Vorlesung, ER.Note FROM studenten S, ergebnisse ER WHERE S.Vorname='Heinz' AND ER.MatrikelNr = S.MatrikelNr Ergebnisse von Studenten mit Vornamen Heinz Zusammenfügen (engl. join) über Attribute MatrikelNr Attribute von beiden Tabellen zugreifbar Alias für Tabellen, um weniger schreiben zu müssen

SQL IN JAVA

INTERAKTION MIT DER DATENBANK MITTELS JDBC Kommunikation mit Datenbank über Verbindung (Connection) Absetzen von Befehlen über Anweisungen (Statement) Anweisungen mit Lücken und automatischem Maskieren/Escapen (PreparedStatement) Iterieren über die Liste der Ergebnisse (ResultSet)

UPDATE UND QUERY Connection con =...; Statement stmt = con.createstatement(); int n = stmt.executeupdate("delete FROM studenten WHERE MatrikelNr=367891"); // n enthaelt die Anzahl der geloeschten Zeilen Für INSERT, UPDATE, DELETE, CREATE TABLE. Connection con =...; Statement stmt = con.createstatement(); ResultSet res = stmt.executequery("select * FROM studenten WHERE MatrikelNr=367891"); while(res.next()) { int matriklnr = res.getint("matrikelnr"); String vorname = res.getstring("vorname"); String nachname = res.getstring("nachname"); //... } Für SELECT mit Ergebnis.

DYNAMISCHE ANFRAGEN public class Dynamic { public static void main(string[] args) { Connection con =...; Statement stmt = con.createstatement(); stmt.executeupdate("delete FROM studenten WHERE MatrikelNr=" + args[0]); } } Schlecht: java Dynamic "367891; DELETE FROM ergebnisse" DELETE FROM studenten WHERE MatrikelNr=367891; DELETE FROM ergebnisse Nebeneffekt: Alle Ergebnisse gelöscht!

PREPAREDSTATEMENT public class Dynamic { public static void main(string[] args) { Connection con =...; PreparedStatement pstmt = con.preparestatement( "DELETE FROM studenten WHERE MatrikelNr=?"); pstmt.setint(1, Integer.parseInt(args[0])); pstmt.executeupdate(); } } Vermeidet missbräuchliche Verwendung durch Escapen. Auch pstmt.setstring(1, args[0]) würde zum Fehler führen, weil nicht typkorrekt.