Programmieren in Java



Ähnliche Dokumente
Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS Universität zu Lübeck

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

Java zur Realisierung von Internetanwendungen

Java Einführung Abstrakte Klassen und Interfaces

RESTful Web. Representational State Transfer

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Distributed Computing Group

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

SAP NetWeaver Gateway. 2013

Programmiermethodik. Übung 13

Auszug aus JAX-WS Folien

Java - Webapplikationen

Web 2.0 Software-Architekturen

AJAX Implementierung mit Joomla!

Java Server Pages (JSP)

Übungen zu Softwaretechnik

Web Sockets mit HTML5. Quelle:

Web- Applikationen. in Java-Web

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

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

WebService in Java SE und EE

Objektorientierte Programmierung

Programmers Manual Geodaten Ver. 2.0

Der lokale und verteilte Fall

MCRServlet Table of contents

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

e-commerce Running Tomcat

Zustandsgebundene Webservices

Programmieren II. Wie kommen Daten von einem Webserver? Vorlesung 12. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

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

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

ecall sms & fax-portal

Programmieren I. Kapitel 15. Ein und Ausgabe

Service Engineering. Einbindung von Web Services in eine Java-Anwendung. Prof. Dr. Andreas Schmietendorf 1. SoSe Service Engineering

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Gebundene Typparameter

Schritt 4: Hallo Enterprise Bean

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Programmieren II. Remote-Programmierung. Institut für Angewandte Informatik

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Client-Server-Beziehungen

Von Keerthikan T. & Siyar Kolusari

Algorithmen und Datenstrukturen

Praktikum aus Softwareentwicklung 2, Stunde 11

Themen. Web Service - Clients. Kommunikation zw. Web Services

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Datenbanksysteme SS 2007

Wiederholung: Beginn

Verwendung der PayJoe -API zum externen Upload von Belegen und Zahlungen

Um DynDNS zu konfigurieren, muss ausschließlich folgendes Menü konfiguriert werden:

Struts 2 Das Imperium schlägt zurück?

Client/Server-Systeme

Das neue Volume-Flag S (Scannen erforderlich)

Sitzungszustand. Vorläufige Version 309 c 2005 Peter Thiemann

C# im Vergleich zu Java

Installation mit Lizenz-Server verbinden

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Webservices. 1 Einführung 2 Verwendete Standards 3 Web Services mit Java 4 Zusammenfassung. Hauptseminar Internet Dienste

Verteilte Systeme: Übung 4

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

BIF/SWE 1 - Übungsbeispiel

Programmieren in Java

Workflow, Business Process Management, 4.Teil

Zugriff auf Firebird-Datenbanken mit PHP. Daniel de West DB-Campus-Treffen 15. Januar 2004

Java: Vererbung. Teil 3: super()

Application Note. Anbindung von Kunden-Software an SpiderControl Web Visualisierung

Applet Firewall und Freigabe der Objekte

VMware vrealize Log Insight- Entwicklerhandbuch

Programmieren in Java

OWASP Stammtisch München Sep 2014 XSS und andere Sicherheitslücken aus der Perspektive des Programmcodes

Inhaltsverzeichnis. Open-Xchange Authentication & Sessionhandling

OS IDE Webserver Integration des Webservers in die IDE Wireshark Webserver II Dynamisches Webprojekt in Eclipse

Mainframe Internet Integration. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013. WebSphere Application Server Teil 4

Verteilte Systeme CS5001

Application Server und Continuous Integration

Schritt 5: Session Beans

Programmentwicklung ohne BlueJ

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de (c) Michael Behrendt -

Informatik I: Einführung in die Programmierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Java RMI Remote Method Invocation

1.1. Apache / Tomcat via JK JNI ## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED

Enterprise java beans step-by-step

Python SVN-Revision 12

Einführung in die Programmierung

Dokumentation owncloud PH Wien

Destructive AJAX. Stefan Proksch Christoph Kirchmayr

Dokumentation für das Web-basierte Abkürzungsverzeichnis (Oracle mod_plsql / Apache)

Bes 10 Für ios und Android

Proseminar: Website-Management-Systeme

Technische Anforderungen. zum Empfang. von XML-Nachrichten

Programmieren II. Sockets. Vorlesung 16. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Sockets.

Seite Out-Of-Band-Authentifizierung (OOBA) 8.1 Einleitung

Log xmllog textlog Log() start(filename) add(message) end() instance() Abbildung 7-10: Die Protokollierungs-API mit einer einfachen Fassade

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

Low-Level Client-Server Architektur

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Transkript:

Programmieren in Java Vorlesung 06: Webprogrammierung Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2013 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 22

Inhalt Vorlesungsüberblick Webprogrammierung Einführung Java API: Client Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 2 / 22

Vorlesungsüberblick Vorlesungsüberblick Bisher Einfache Klassen, Enum, Tests Zusammengesetzte Klassen (Interfaces), Collections Abstraktion mit Klassen, Refactoring mit Eclipse GUI mit Swing Testen abstrakter Klassen, Mock-Objekte, Pattern Geplant Webprogrammierung mit Servlets Generics Vergleiche in Java: equals, compareto, hashcode, Iterator. Exceptions, Input/Output-Hierarchie, XML, Serialization Rekursive Klassen, Reflection Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 3 / 22

Einführung Was ist Webprogrammierung? Applikationen bestehen aus kommunizierenden Komponenten Typischerweise: Server und Clients Ein weites Feld, viele Technologien hier: nur,,reinschnuppern Eindruck von der Struktur einer solchen Applikation Weitere Informationen: Anders Møller, Michael Schwartzbach:,, An Introduction to XML and Web Technologies Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 4 / 22

Einführung HTTP Prinzip Geläufiges Protokoll für Client-Server Kommunikation Request Server Response Client 1 Request Response Client 2 Clients stellen Requests Abfragen von Serverdaten (z.b.,,gib mir diese Datei! ) Nachricht an den Server (z.b.,,ich bin ab jetzt offline! ) Server antworten mit Response: Status (200 OK, 404 NOT FOUND) Inhalt: <!doctype html> <html itemscope="itemscope"> <head> <me+... Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 5 / 22

Einführung HTTP Requests Anfrage geht an eine http-url http:// server : port / path / to / resource? query http://www.google.de:80/search?q=hello Request Methods: GET Abfrage von Daten. Sollte keine Zustandsänderung auf dem Server verursachen. POST Nachricht an den Server, die seinen internen Zustand verändert. Es sind noch weitere Methoden vorhanden (DELETE,... ); diese werden aber wenig genutzt. Rest des Requests: Header mit weiteren Parametern, eventuell gefolgt von einem Datenstrom, der zum Server hochgeladen werden soll. Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 6 / 22

Einführung HTTP Response Die Antwort des Servers besteht, unter anderem, aus: Response Code: 200 OK, 400 BAD REQUEST, 404 NOT FOUND, https://en.wikipedia.org/wiki/list of HTTP status codes Content-Type, eine genormte Bezeichnung für die Art bzw. das Format der Übermittelten Daten, und einem Datenstrom, der die vom Client gewünschten Daten enthält. Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 7 / 22

Java API: Client Java API: Client Download von einem HTTP-Server // Create an URL object. URL url = new URL( http://localhost:8080/java2013git/monopolysnapshot ); // Open the connection to the server located at the url // Note the need to cast into a connection for HTTP! HttpURLConnection con = (HttpURLConnection)url.openConnection(); // set the request method (GET is also the default) con.setrequestmethod( GET ); // Access the response code System.out.println( + con.getresponsecode() + con.getresponsemessage()); // Get an input stream for the data the server is sending... InputStream download = con.getinputstream(); // Read 50 bytes from the server byte[] data = new byte[50]; download.read(data); // Close the stream download.close(); Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 8 / 22

Java API: Client Java API: Client Query an einen Server Das Übermitteln von sehr einfachen und kurzen Daten an den Server kann direkt über den Query String geschehen: String urlprefix = http://localhost:8080/helloworld/hello ; // Encode the query, to allow characters not allowed in URLs // (always use UTF 8 as the second argument) String query = URLEncoder.encode( What is the time?, UTF 8 ); // assertequals( What+is+the+time%3F, query); URL url = new URL(urlPrefix +? + query);... Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 9 / 22

Java API: Client Java API: Client Upload zu einem HTTP-Server // Create an URL object and open the connection. URL url = new URL( http://localhost:8080/java2013git/monopolysnapshot ); HttpURLConnection con = (HttpURLConnection)url.openConnection(); // set the request method to POST con.setrequestmethod( POST ); // enable upload con.setdooutput(true); // get the output stream to the server OutputStream upload = con.getoutputstream(); // write data to upload to the stream and close it upload.write(...); upload.close(); // Access the response code; no further upload possible after this point System.out.println( + con.getresponsecode() + con.getresponsemessage()); Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 10 / 22

Komponenten Servlet Container (Web Server) Übernimmt low-level Kommunikation Implementierungen: Apache Tomcat, Jetty,... Typischerweise verwaltet durch System-Administrator Für den Webprogrammierer: Testumgebung, z.b. mit Eclipse plugins 1 Servlet Spezielle Klasse, die einzelne Anfragen behandelt. Instanziierung und Aufruf der Anfrage-Methoden durch Servlet Container Implementierung durch Webprogrammierer = Unser Fokus 1 http://proglang.informatik.uni-freiburg.de/teaching/java/2013/eclipse-jee.html Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 11 / 22

Hello World Servlet // Implement a servlet by extending HttpServlet. // Specify the location on the server as an @WebServlet annotation @WebServlet( /Hello ) public class Hello extends HttpServlet { // Handler for GET requests. Request and response are available from the parameters protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // Get the query string from the request String q = request.getquerystring(); if (q == null) {q = <none> ;} // default when no query given else { q = URLDecoder.decode(q, UTF 8 ); } // decode the request // set the repsonse code response.setstatus(httpservletresponse.sc OK); // indicate that the response is plain text response.setcontenttype( text/plain ); // Transmit the content of the response with a java.io.printwriter PrintWriter w = response.getwriter(); w.println( Hello Internet User!\n Your query was: + q); }} Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 12 / 22

Hello World Servlet in Action Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 13 / 22

Uploads von Clients protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // Get an input stream InputStream s = request.getinputstream(); // Prepare buffer (alternatively use java.io Classes) and read the data byte[] reqdata = new byte[100]; s.read(reqdata); // Send a response response.getwriter().println( Got: + Arrays.toString(reqData)); } Achtung: für verlässlichen Betrieb müssen weitere Maßnahmen ergriffen werden, damit böswillige Clients den Server nicht blockieren können Verbindungszeit mit dem Client muss begrenzt werden (Anzahl der parallelen Verbindungen zum Server sind begrenzt.) Dies kann durch Konfiguration des Servers erreicht werden (nicht Teil dieser Vorlesung) Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 14 / 22

Request Verarbeitung Routen der Requests auf Servlets Verteilung der Requests auf,,worker-threads Parallele Abarbeitung der Requests Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 15 / 22

Request Verarbeitung Servlet Container @WebServlet( /Foo ) @WebServlet( /Bar ) doget dopost Parallele Abarbeitung doget dopost doget doget Verteilung http://.../foo Routing http://.../bar Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 16 / 22

Request Verarbeitung Routen der Requests auf Servlets Verteilung der Requests auf,,worker-threads Parallele Abarbeitung der Requests: Daten, die über mehrere Requests und/oder Servlets hinweg gültig sein sollen, müssen speziell behandelt werden! = Der ServletContext kann solche Daten verwalten. Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 17 / 22

Servlet Context Beispiel Gemeinsamer Zugriff auf einen String @WebServlet( /Submit ) class Submit... { public void dopost(...) { String req = request.getquerystring();... // store the submitted data // in the shared context // choose an arbitrary identifier: // submit.data // remember that submit.data // holds a String this.getservletcontext().setattribute( submit.data, req);... } } @WebServlet( /Readout ) class Readout... { public void dopost(...) { // retreive the currently submitted data // we know it is a string, // and cast it accordingly String data = (String)this.getServletContext().getAttribute( submit.data ); if (data == null) {... }... response.getwriter().println(data); } } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 18 / 22

Nebenläufige Zustandsänderung ServletContext erlaubt nur,,zwischenlagern einzelner Objekte. Request-Bearbeitung in Threads kann in beliebiger zeitlicher Vermischung passieren. Zustandsänderungen, die von gemeinsamen Daten abhängen, müssen zusätzlich geschützt werden. Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 19 / 22

Nebenläufige Zustandsänderung Falsch: Integer i = (Integer) this.getservletcontext().getattribute( requestcount ); this.getservletcontext().setattribute( requestcount, new Integer(i + 1)); requestcount = 0 Thread 1 Thread 2 Integer i = (Integer) this.getservletcontext().getattribute( requestcount ); i = 0 requestcount = 0 Integer i = (Integer) this.getservletcontext().getattribute( requestcount ); requestcount = 0 i = 0 i = 0 Zeit this.getservletcontext().setattribute( requestcount, new Integer(i + 1)); i = 0 requestcount = 1 i + 1 = 1 this.getservletcontext().setattribute( requestcount, new Integer(i + 1)); i + 1 = 1 requestcount = 1 (sollte sein: 2) i + 1 = 1 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 20 / 22

Message Queue (MQ) ordnet nebenläufige Anfragen sequentiell Arbeiterprozess GameRunner arbeitet Anfragen sequentiell ab Verteilt Antworten an entsprechende MQ der Spielers Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 21 / 22

Abarbeiten von Nebenläufigen Requests Server Sicht MQ GameRequest Alfred Submit GameRunner Berta Submit Chris Submit Submit Servlet MQ String Response Servlet Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 22 / 22