Internet-Technologien und Java

Slides:



Advertisements
Ähnliche Präsentationen
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
Advertisements

DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Ein Beispiel in Java.
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
Software Engineering Praktikum SS 2003
Software Engineering Praktikum WS 2002/03
Internet-Datenbanken
Tomcat Web-Server installieren
Internetzugriff mit Strings und Streams
Java 2 Enterprise Edition (J2EE)
Ausnahmen HS Merseburg (FH) WS 06/07.
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Ein Beispiel in Java.
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Internet-Technologien und Java. Beispiel: Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.
Polymorphie (Vielgestaltigkeit)
Assoziationen (Beziehungen). Zwischen Objekten kann es eine Beziehung geben.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Dynamische Webseiten mit PHP Oder: LAMP - The open way.
Dynamische Webseiten mit PHP
Dynamische Webseiten Java servlets.
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Programmieren mit JAVA
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
JDBC EDV JDBC.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
FH-Hof HTML - Einführung Richard Göbel. FH-Hof Komponenten des World Wide Webs WWW Browser HyperText Transfer Protocol (HTTP) via Internet WWW Server.
Einführung Servlets/JSPs
Wir bauen uns eine Webapplikation!
Hyperlinks und Anker Links notieren
Client-Server Modell Advanced IT Basics Nicolas Frings.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Grundlagen: Client-Server-Modell
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
Wird ganz am Anfang der HTML-Datei geschrieben Doctype html public bedeutet, dass man sich auf die Öffentlichkeit der html-dtd bezieht Html ist die meist.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Internet und SMS Internet und SMS Daniel Rickenbacher Jeremy Deuel.
CGI (Common Gateway Interface)
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Optimale Ursprungsgerade
Dynamische Webseiten-Generierung
Einführung in PHP 5.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
HTTP IT-Zertifikat Universität zu Köln Allgemeine Technologien II
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Willkommen zum Brückensemester
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Formulare Vanessa Kogelbauer.
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Webserver Apache & Xampp Referenten: Elena, Luziano und Sükran
1 Servlets Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container.
Oracle ADF FacesSeite 1 Oracle ADF Faces OPITZ CONSULTING Oracles Implementierung der JavaServer Faces Spezifikation.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
Internet-Technologien und Java
Tutorstunde 10.
 Präsentation transkript:

Internet-Technologien und Java

Beispiel:

http://www.gega.de/geld.html Client-PC Server-PC (Webserver) Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile ? Uniform Resource Locator (URL; Dt. etwa: "einheitliche Ressourcen-Adresse"). Der URL ist die eindeutige Adresse einer Ressource (zum Beispiel eines Dokuments) im Internet.

http://www.gega.de/geld.html Client-PC Server-PC (Webserver) Die Teile der URL im Einzelnen: http Protokoll des Dienstes WWW. Ein Dienst ist eine bestimmte Kommunikationsform (wie z.B. email, Diskussionsforen, usw.) www Name des Webservers. Der Client (Browser) stellt eine Anforderung (Request) an der Server (Webserver)

http://www.gega.de/geld.html Client-PC Server-PC (Webserver) gega.de Dies ist die Domäne (eine Verwaltungseinheit, vergleichbar mit einem Ordner) geld.html Name der Datei, die angefordert wird (also hier eine Webpage). Was geschieht im Einzelnen?

http://www.gega.de/geld.html Client-PC Server-PC (Webserver) Allgemein: Ein Programm (= Client) auf einem Rechner (Client-PC) fordert einen Dienst von einem anderen (passiv wartenden) Programm (= Server) auf einem Rechner (Server-PC) an und erhält von diesem die Leistung.

http://www.gega.de/geld.html geld.html Client-PC Server-PC (Webserver) Konkret: Der Client fordert die Datei geld.html an (stellt eine Anfrage (engl. Request)). Der Server (Webserver) sucht sie in seinem Dateisystem und sendet sie wieder an den Client (Browser) zurück. Der Client gibt diese html-Datei auf dem Bildschirm aus. Die gemeinsame Sprache (Protokoll) von Client und Server ist "http-ianisch". sendet geld.html sucht geld.html Dateisystem des Webserver

Leider kann man mit dieser Technologie nur statische Websites (html-Dateien) anfordern, d.h. Dateien, die sich im Augenblick der Anforderung schon auf dem Dateisystem des Servers befinden müssen.

Für viele Fälle reicht das allerdings nicht aus Für viele Fälle reicht das allerdings nicht aus ... Können Sie einen Fall angeben, wo der Server die Information, die er liefern soll, im Augenblick der Anfrage noch nicht kennen kann?

Eine Suchmaschine kann die Daten, die sie senden soll, nicht im Augenblick der Anfrage schon kennen, weil sie von den Suchbegriffen, (die der Client an den Server sendet) abhängt.

Eine dynamische Website wird erst in dem Augenblick –von einem (im Folgenden) Erstellungsprogramm genannten Programm zusammengebastelt, in dem sie beim Server angefordert wird.

Es gibt verschiedene, häufig benutzte Schnittstellen zwischen einem Webserver und einem Erstellungsprogramm: - CGI (Common Gateway Interface) - Servlet-Container

Wir werden uns hier mit dem Servlet-Container beschäftigen Wir werden uns hier mit dem Servlet-Container beschäftigen. Ein bekannter Servlet-Container ist die kostenlose Software Tomcat, die auf einem Webserver, wie dem Apache Webserver installiert werden kann.

Der Webserver gibt die Antwort (response) an den Client Client (Browser) Der Webserver gibt die Antwort (response) an den Client Anfrage (request) Webserver (z.B. Apache) Der Webserver reicht die Anfrage an den Servlet-Container (Schnittstelle) weiter Der Servlet-Container gibt die Antwort an den Webserver weiter Servlet-Container (z.B. Tomcat) Der Servlet-Container spricht das Servlet an. Das Servlet erzeugt eine Antwort, z.B. in Form von html-Befehlen (html-Text) Erstellungsprogramm (Servlet)

Beispiel: Das Servlet ServletHalloWelt1 Beispiel: Das Servlet ServletHalloWelt1.class soll eine html-Datei erzeugen, die die Meldung "Hallo Welt" auf dem Bildschirm des Clients ausgibt.

Wie wird dieses Servlet im Browser aufgerufen, d.h. wie heißt die URL?

http://localhost:8080/halloWelt1/ ServletHalloWelt1 localhost ist der Domain-Name des eigenen Rechners. Es wird die Portnummer 8080 verwendet. Die Pfadangabe für das Servlet: halloWelt1/ServletHalloWelt1 Damit wird das Erstellungsprogramm ServletHalloWelt1 aufgerufen, das eine Website erzeugt, die an den Client-PC geschickt wird und von diesem auf dem Bildschirm ausgegeben wird. Das Servlet wurde mit der Entwicklungsumgebung Netbeans im Projekt halloWelt1 erzeugt und heißt ServletHalloWelt1.class Es muss an eine bestimmte Stelle in der Verzeichnisstruktur des Webservers kopiert werden (siehe Beschreibung).

http://localhost:8080/halloWelt1 /ServletHalloWelt1 produzierte html-Befehle (html-Text) Server-PC (Webserver) Client-PC Im Browser wird diese Zeile eingegeben. Was geschieht ? sucht ServletHalloWelt1 Konkret: Der Client fordert die Datei ServletHalloWelt1 an (stellt eine Anfrage (engl. Request)). Da diese Datei nicht die Endung . html hat, ist es keine statische Datei. Deshalb wird die Anfrage an den Servlet-Container weitergereicht, der das Erstellungsprogramm ServletHalloWelt1.class sucht (und falls gefunden) ausführt. Die dabei produzierten html-Befehle (html-Text) werden an den Client durchgereicht. Servlet-Container produziert html-Befehle Erstellungs-Programm

package packageHalloWelt1; import java.io.*; import javax.servlet.*; Wenn das Servlet erfolgreich (ohne Exception) geladen wurde, steht das Servlet für Anfragen bereit. Dies geschieht durch die Methode service(..). Der Servlet-Container kann diese Methode beliebig oft (bei jeder Anfrage) für ein Objekt aufrufen. package packageHalloWelt1; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHalloWelt1 extends HttpServlet { protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Die Erzeugung eines Objekts der Klasse ServletHalloWelt1 übernimmt der Servlet-Container (also Tomcat). Je nach Konfiguration des Servlet-Containers kann dies beim Start des Webservers oder bei der ersten Anfrage für das Servlet erfolgen.

package packageHalloWelt1; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHalloWelt1 extends HttpServlet { protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Über diese Variable kann man auf die in der Anfrage sich befindlichen Informationen zugreifen (INPUT). Die Variablennamen sind zwar frei wählbar, doch sind die Namen request und response selbstsprechend. Über diese Variable kann man die an das Servlet gestellte Fragen beantworten, d.h. Informationen dem Client zukommen lassen (OUTPUT).

package packageHalloWelt1; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHalloWelt1 extends HttpServlet { protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Exceptions, die in dieser Methode auftreten, werden nicht abgefangen, sondern an den Servlet-Container (Tomcat) weitergeleitet.

package packageHalloWelt1; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHalloWelt1 extends HttpServlet { protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Bei unserer Tomcat-Version (und unserer Konfiguration) wird verlangt, dass man ein package benutzt.

response.setContentType( "text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hallo Welt</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hallo Welt</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } Content-type: text/html Mit dieser MIME-Spezifikation (Multipurpose Internet Mail Extensions) wird festgelegt, um welche Art (Bild, Musik, HTML, Film, usw.) von Daten es sich handelt, die übertragen werden. Die Bezeichnung text ist hier der MIME-Typ und html ist der MIME-Subtype.

response.setContentType( "text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hallo Welt</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hallo Welt</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } Man braucht eine Variable der Klasse PrintWriter. Damit kann man einen Ausgabestrom erzeugen, der an den Client gesendet wird.

response.setContentType( "text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hallo Welt</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hallo Welt</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } Diese mit println versendeten Zeichenketten (das ist html-Code !!) werden an den Client gesendet. Dessen Browser stellt den durch den html-Code festgelegten Text dann auf dem Bildschirm dar.

response.setContentType( "text/html"); PrintWriter out = Ist zur Darstellung dieses html-Codes unbedingt, wie hier geschehen, ein dynamische Website (mit Hilfe eines Servlet) nötig? response.setContentType( "text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hallo Welt</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hallo Welt</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } Nein. Da die Ausgabe auch schon vor der Anfrage bekannt ist, könnte man auch eine statische html-Website verwenden. Dies wurde hier nicht gemacht, da die Benutzung eines Servlets an einem sehr einfachen Beispiel gezeigt werden sollte.

System.out.println("Man sieht mich 1 Mal"); } public void init(){ System.out.println("Man sieht mich 1 Mal"); } Nachdem ein Objekt des Servlets erzeugt wurde, führt der Servlet-Container eine Initialisierung durch, indem die Methode init() genau einmal aufgerufen wird. Wenn man also eine Methode braucht, die nur genau einmal aufgerufen werden soll, verwendet man init(). Nebenbei: System.out.println("Man sieht mich nur 1 Mal"); gibt die Zeichenkette "Man sieht ..." nicht auf dem Bildschirm des Client aus, sondern im Ausgabefenster des Tomcat (bitte nachprüfen)!

Aufgabe (Beispiel): Zur Kontrolle (richtig geschrieben Aufgabe (Beispiel): Zur Kontrolle (richtig geschrieben?) soll dem Client nochmals der eingegebene Nach- und Vorname zugesendet werden.

Dazu wird ein neues Projekt erstellt (das Servlet heißt ServletDoGet1 Dazu wird ein neues Projekt erstellt (das Servlet heißt ServletDoGet1.java)

Problem: Wie kann man in einer html-Datei (hier heisst sie getMain Problem: Wie kann man in einer html-Datei (hier heisst sie getMain.html) die eingegebenen Daten an den Webserver versenden?

<title>Datenerfassung</title> </head> <body> <html> <head> <title>Datenerfassung</title> </head> <body> <h1>Datenerfassung</h1> Übliche Beginn einer html-Website

ServletDoGet1" method="get"> Vorname : <input type="text" <form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" <input type="submit" value="Daten an Servlet übertragen"> </form> </body> </html> Mit form wird ein Formular definiert Mit action= ... gibt man das Servlet-Programm an, das auf dem Webserver ausgeführt werden soll. Mit methode= ... gibt man die Art (get oder post) an, wie die Daten übertragen werden. get bedeutet, dass das http-Kommando get verwendet wurde

ServletDoGet1" method="get"> Vorname : <input type="text" <form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" <input type="submit" value="Daten an Servlet übertragen"> </form> </body> </html> Mit input wird ein einzeiliges Eingabefeld definiert. Mit type=text wird angegeben, dass Text eingegeben wird. Der Name des ersten Textfeldes soll hier vorname heissen. Die Anzeigelänge des Textes auf dem Bildschirm soll 40 Zeichen sein.

ServletDoGet1" method="get"> Vorname : <input type="text" <form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" <input type="submit" value="Daten an Servlet übertragen"> </form> </body> </html> Mit input type = "submit" ... definiert man einen Absendebutton, der beim Anklicken alle Formulardaten versendet (submit deutsch: unterbreiten, vorschlagen). Mit value=... kann man den Button beschriften.

ServletDoGet1" method="get"> Vorname : <input type="text" <form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" <input type="submit" value="Daten an Servlet übertragen"> </form> </body> </html> Nochmals zur get-Methode: Die zu versendeten Daten (Vorname, Nachname) werden an die URL angehängt (kann man imBrowser sehen!!) und sind damit sichtbar !! http://localhost:8080/doGet1/ ServletDoGet1?vorname=Fritz&nachname=Maier und werden vom Servlet durch eine entsprechende Methode (doGet) in Empfang genommen und verarbeitet.

ServletDoGet1" method="get"> Vorname : <input type="text" <form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" <input type="submit" value="Daten an Servlet übertragen"> </form> </body> </html> post-Methode: Bei einem mit post durchgeführten Request, werden die Daten nach dem Header (unsichtbar) übertragen. und werden vom Servlet durch eine entsprechende Methode (doPost) in Empfang genommen und verarbeitet.

Alternativ kann man das Formular auch mit einer Tabelle erstellen:

ServletDoGet1" method="get"> <table> <tr> <form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> <table> <tr> <td>Vorname: </td> <td><input type="text" name="vorname" size="40"></td> </tr> <td>Name: </td> name="nachname" </table> <br> <table> erzeugt eine Tabelle. <tr> erzeugt eine Tabellenzeile, die jeweils aus einer mit <td> erstellten Tabellenzelle besteht.

<input type="submit" value="Daten an Servlet übertragen"> </form> </body> </html>

Wo befindet sich das Formular getMain.html und wo das Servlet?

http://localhost:8080/doget1/ getMain.html Client-PC Server-PC (Webserver) Im Browser wird diese Zeile eingegeben. Was geschieht ? sucht getMain.html Konkret: Der Client fordert die Datei getMain.html an (stellt eine Anfrage (engl. Request)). Da diese Datei die Endung .html hat, ist es eine statische Datei. Deshalb sucht sie der Server (Webserver) in seinem Dateisystem und sendet sie an den Client (Browser) zurück. Der Client gibt diese html-Datei auf dem Bildschirm aus. sendet getMain.html Dateisystem des Webserver

Auf dem Bildschirm befindet sich nun der Inhalt der statischen Datei getMain.html. Der Inhalt besteht u.a. aus einem Formular, in dem die Adresse (URL) des Erstellungsprogramm (Servlet) angegeben ist: http://localhost:8080/doGet1/ServletDoGet1

produzierte html-Befehle (html-Text) Server-PC (Webserver) Client-PC http://localhost:8080/doGet1/ ServletDoGet1?vorname=Fritz&nachname=Maier produzierte html-Befehle (html-Text) Server-PC (Webserver) Client-PC Das Formular im Client fordert die Datei ServletDoGet1 an (stellt eine Anfrage (engl. Request)). Da diese Datei nicht die Endung .html hat, ist es keine statische Datei. Deshalb wird die Anfrage an den Servlet-Container weitergereicht, der das Erstellungsprogramm ServletDoGet1.class sucht (und falls gefunden) ausführt. Die dabei produzierten html-Befehle (html-Text) - u.a. Ausgabe Vorname, Nachname - werden an den Client durchgereicht und im Browser auf dem Bildschirm ausgegeben. sucht ServletDoGet1 Servlet-Container produziert html-Befehle ErstellungsprogrammServletDoGet1

Jetzt das Servlet auf dem Webserver

package packageDoGet1; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletDoGet1 extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Wenn die Methode service() nicht überschrieben wird, dann wird eben die service() Methode der Oberklasse aufgerufen. Diese ist aber so implementiert, dass ein HTTP-Kommando an die dem Typ der Anfrage entsprechende Methode verteilt wird: HTTP-Kommando Servlet-Methode GET doGet() POST doPost()

response.setContentType( "text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Get- Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hier die Infos des Clients:</h1>"); Das Übliche wie im letzten Beispiel...

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); } Die Methode getParameter holt die mit nachname (hier: Maier) und vorname (hier: Fritz) bezeichneten Daten (die der Client versendet hat) ab.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); } Nebenbei: Sind diese 2 Backslashes in dem html-Befehl (html-Text) syntaktisch falsch?

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); } Nein! Zwar heißt der html-Befehl (html-Text) in einer html-Datei: <a href="http://localhost:8080/getMain.html">Back</a> Dieser Befehl muss aber innerhalb eines Java-Programms als eine Zeichenkette dargestellt werden. Innerhalb einer Zeichenkette muss man aber in Java das Zeichen " als \" darstellen.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); } Dann werden diese Daten in html-Code verpackt (d.h.mit dem Überschriftenformat <h2> ... </h2> versehen) und mit out.println an den Client versendet.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); } Mit href wird ein Link erzeugt, der diese Webpage anfordert.

Aufgabe: Was geschieht, wenn der Anwender im Formular z. B Aufgabe: Was geschieht, wenn der Anwender im Formular z.B. statt des Vornamens einen HTML-Text eingibt, wie z.B: <b>Gerd</b>

<b> bedeutet: Fettdruck Es wird also der Name Gerd vom Webserver fett an den Anwender zurückgegeben und vom Browser fett auf dem Bildschirm dargestellt.

Welche Gefahr droht?

Der Anwender kann einen HTML-Text (Programm) an den Webserver senden, der von diesem ausgeführt wird. Dieses Programn kann z.B. Passworte auslesen.

Diese Angriffsart heißt: XSS (Cross Site Scripting)

Jetzt soll die gleiche Aufgabe gelöst werden, aber mit Hilfe der Methode post. Was muss geändert werden?

1) Im Formular muss nur get durch post ersetzt werden und 2) Im Servlet muss nur die Methode doGet durch doPost ersetzt werden.

Aufgabe: In der letzten Aufgabe (eingegebene Nach- und Vorname zusenden) sollen sich der Webserver und der Client auf physikalisch verschiedenen Rechnern eines Netzwerks befinden.

Aufgabe (Zähler): Beim Aufruf einer Webpage soll angezeigt werden, wie oft diese Webpage schon aufgerufen wurde. Dies soll auch funktionieren, falls der Tomcat zwischenzeitlich mal kurz runtergefahren wurde.

package packageCounter1; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletCounter1 extends HttpServlet { int zaehler; RandomAccessFile myDatei = null; String realerPfad; String dateiName; public void init() throws ServletException, UnavailableException { String tempString; boolean b; File myFile;

realerPfad+"zaehler.txt"; try{ myFile = new File(dateiName); realerPfad = this. getServletContext(). getRealPath("/"); dateiName = realerPfad+"zaehler.txt"; try{ myFile = new File(dateiName); b = myFile.isFile(); if(b==true){ myDatei = new RandomAccessFile( dateiName,"rw"); tempString = myDatei.readLine(); if(tempString == null){ zaehler=0; } Damit bastelt man sich den Namen mit Pfad zusammen, also hier: ...\webapps\counter1\zaehler.txt Damit bekommt man den Pfad, wo sich der oberste Ordner einer Webanwendung, also hier konkret der Ordner counter1 befindet. also hier: ...\webapps\counter1\

realerPfad+"zaehler.txt"; try{ myFile = new File(dateiName); realerPfad = this. getServletContext(). getRealPath("/"); dateiName = realerPfad+"zaehler.txt"; try{ myFile = new File(dateiName); b = myFile.isFile(); if(b==true){ myDatei = new RandomAccessFile( dateiName,"rw"); tempString = myDatei.readLine(); if(tempString == null){ zaehler=0; } Prüfen, ob diese Datei existiert Dateiinhalt einlesen wenn Datei existiert, Datei öffnen Ein Objekt anlegen und mit einer Datei "verbinden". Dies bedeutet nicht, dass es diese Datei schon gibt!

realerPfad+"zaehler.txt"; try{ myFile = new File(dateiName); realerPfad = this. getServletContext(). getRealPath("/"); dateiName = realerPfad+"zaehler.txt"; try{ myFile = new File(dateiName); b = myFile.isFile(); if(b==true){ myDatei = new RandomAccessFile( dateiName,"rw"); tempString = myDatei.readLine(); if(tempString == null){ zaehler=0; } Datei ist leer

tempString.length()!=4){ zaehler=0; } else{ zaehler = myDatei. else if( tempString.length()!=4){ zaehler=0; } else{ zaehler = myDatei. readInt(); myDatei = new RandomAccessFile( dateiName,"rw"); zaehler=1; myDatei.close(); Datei existiert nicht, also Datei anlegen. Dateiinhalt ist eine Integer-Zahl (4 Byte groß) Dateiinhalt ist keine Integer-Zahl (4 Byte groß)

catch(FileNotFoundException e){ System.out.println("Fehler: Datei nicht vorhanden: " +e.toString()); e.printStackTrace(); } catch(IOException e){ Dateifehler:"); Exceptions abfangen

doGet(HttpServletRequest request, HttpServletResponse response) throws protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { zaehler = zaehler + 1; try{ myDatei = new RandomAccessFile( dateiName,"rw"); myDatei.seek(0); myDatei.writeInt(zaehler); myDatei.close(); } Zähler erhöhen neuen Zählerwert zurückschreiben Methode wird bei jeder Anfrage aufgerufen

catch(FileNotFoundException e){ System.out.println( "Fehler: Datei nicht vorhanden: " +e.toString()); } catch(IOException e){ System.out.println("Fehler: Dateifehler :"); e.printStackTrace();

response.setContentType( "text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Zähler Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Das Zähler Servlet wurde "+zaehler+ " Mal aufgerufen</h1>"); out.println("</body>"); out.println("</html>"); out.close(); }