Internet-Technologien und Java. Beispiel: Im Browser wird diese Zeile eingegeben. Wie nennt man...

69
Internet- Technologien und Java

Transcript of Internet-Technologien und Java. Beispiel: Im Browser wird diese Zeile eingegeben. Wie nennt man...

Page 1: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Internet-Technologien und Java

Page 2: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Beispiel:

Page 3: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://www.gega.de/geld.html

Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile ?

Client-PC Server-PC(Webserver)

Uniform Resource Locator (URL; Dt. etwa: "einheitliche Ressourcen-Adresse"). Der URL ist die eindeutige Adresse einer Ressource (zum Beispiel eines Dokuments) im Internet.

Page 4: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://www.gega.de/geld.html

Die Teile der URL im Einzelnen:

httpProtokoll des Dienstes WWW. Ein Dienst ist eine bestimmte Kommunikationsform (wie z.B. email, Diskussionsforen, usw.)

wwwName des Webservers. Der Client (Browser) stellt eine Anforderung (Request) an der Server (Webserver)

Client-PC Server-PC(Webserver)

Page 5: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://www.gega.de/geld.html

geld.htmlName der Datei, die angefordert wird (also hier eine Webpage).

gega.deDies ist die Domäne (eine Verwaltungseinheit, vergleichbar mit einem Ordner)

Client-PC Server-PC(Webserver)

Was geschieht im Einzelnen?

Page 6: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://www.gega.de/geld.html

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.

Client-PC Server-PC(Webserver)

Page 7: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://www.gega.de/geld.html

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".

Client-PC Server-PC(Webserver)

sendetgeld.htm

l

geld.html

Dateisystem desWebserver

sucht geld.htm

l

Page 8: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 9: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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?

Page 10: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 11: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Eine dynamische Website wird erst in dem Augenblick –von

einem (im Folgenden) Erstellungsprogramm genannten Programm

zusammengebastelt, in dem sie beim Server angefordert wird.

Page 12: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 13: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 14: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Anfrage (request) Der Webserver gibt die Antwort (response) an den Client

Client(Browser)

Webserver (z.B. Apache)

Servlet-Container(z.B. Tomcat)

Erstellungsprogramm (Servlet)

Der Webserver reicht die Anfrage an den Servlet-Container (Schnittstelle) weiter

Der Servlet-Container spricht das Servlet an.

Das Servlet erzeugt eine Antwort, z.B. in Form von html-Befehlen (html-Text)

Der Servlet-Container gibt die Antwort an den Webserver weiter

Page 15: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 16: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 17: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://localhost:8080/halloWelt1/ ServletHalloWelt1localhost ist der Domain-Name des eigenen Rechners. Es wird die Portnummer 8080 verwendet. Die Pfadangabe für das Servlet:halloWelt1/ServletHalloWelt1Damit 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.classEs muss an eine bestimmte Stelle in der Verzeichnisstruktur des Webservers kopiert werden (siehe Beschreibung).

Page 18: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://localhost:8080/halloWelt1 /ServletHalloWelt1

Im Browser wird diese Zeile eingegeben. Was geschieht ?

Client-PC Server-PC(Webserver)

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

sucht S

ervletHalloW

elt1

Erstellungs-Programm

produzierte html-Befehle (html-Text)

produziert htm

l-Befehle

Page 19: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Wenn das Servlet erfolgreich (ohne Exception) geladen wurde, steht das Servlet für Anfragen bereit. Dies geschieht durch die Methodeservice(..). Der Servlet-Container kann diese Methode beliebig oft (bei jeder Anfrage) für ein Objekt aufrufen.

Page 20: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Über diese Variable kann man die an das Servlet gestellte Fragen beantworten, d.h. Informationen dem Client zukommen lassen (OUTPUT).

Die Variablennamen sind zwar frei wählbar, doch sind die Namen request und response selbstsprechend.

Page 21: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 22: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 23: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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/htmlMit 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.

Page 24: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 25: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 26: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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(); }

Ist zur Darstellung dieses html-Codes unbedingt, wie hier geschehen, ein dynamische Website (mit Hilfe eines Servlet) nötig?

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.

Page 27: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

public void init(){ System.out.println("Man sieht mich 1 Mal"); }}

Nachdem ein Objekt des Servlets erzeugt wurde, führt der Servlet-Containereine 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)!

Page 28: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 29: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 30: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 31: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<html> <head> <title>Datenerfassung</title> </head> <body> <h1>Datenerfassung</h1>

Übliche Beginn einer html-Website

Page 32: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" size="40"><br> <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

Page 33: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" size="40"><br> <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.

Page 34: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" size="40"><br> <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.

Page 35: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" size="40"><br> <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=Maierund werden vom Servlet durch eine entsprechende Methode (doGet) in Empfang genommen und verarbeitet.

Page 36: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> Vorname : <input type="text" name="vorname" size="40"><br> Nachname: <input type="text" name="nachname" size="40"><br> <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.

Page 37: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Alternativ kann man das Formular auch mit einer

Tabelle erstellen:

Page 38: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

<form action= "http://localhost:8080/doGet1/ ServletDoGet1" method="get"> <table> <tr> <td>Vorname: </td> <td><input type="text" name="vorname" size="40"></td> </tr> <tr> <td>Name: </td> <td><input type="text" name="nachname" size="40"></td> </tr> </table> <br>

<table> erzeugt eine Tabelle.<tr> erzeugt eine Tabellenzeile, die jeweils aus einer mit <td> erstellten Tabellenzelle besteht.

Page 39: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 40: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Wo befindet sich das Formular getMain.html

und wo das Servlet?

Page 41: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://localhost:8080/doget1/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.

Client-PC Server-PC(Webserver)

sucht getM

ain.html

getMain.html

Dateisystem desWebserver

sendet getM

ain.html

Im Browser wird diese Zeile eingegeben. Was geschieht ?

Page 42: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 43: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

http://localhost:8080/doGet1/ServletDoGet1?vorname=Fritz&nachname=Maier

Client-PC Server-PC(Webserver)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.

Servlet-Container

sucht S

ervletDoG

et1

ErstellungsprogrammServletDoGet1

produzierte html-Befehle (html-Text)

produziert htm

l-Befehle

Page 44: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Jetzt das Servlet auf dem Webserver

Page 45: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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-MethodeGET doGet()POST doPost()

Page 46: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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...

Page 47: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" +request.getParameter( "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.

Page 48: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" +request.getParameter( "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?

Page 49: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" +request.getParameter( "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.

Page 50: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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:" +request.getParameter( "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); }}

Page 51: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Mit href wird ein Link erzeugt, der diese Webpage anfordert.

out.println("<h2>NACHNAME:" +request.getParameter( "nachname")+"</h2>"); out.println("<h2>VORNAME:" +request.getParameter( "vorname")+"</h2>"); out.println("<a href=\"http: //localhost:8080/ getMain.html\">Back</a>"); out.println("</body>"); out.println("</html>"); out.close(); }}

Page 52: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 53: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 54: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

Welche Gefahr droht?

Page 55: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 56: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 57: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 58: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 59: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 60: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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.

Page 61: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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;

Page 62: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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 bekommt man den Pfad, wo sich der oberste Ordner einer Webanwendung, also hier konkret der Ordner counter1 befindet. also hier:...\webapps\counter1\

Damit bastelt man sich den Namen mit Pfad zusammen, also hier:...\webapps\counter1\zaehler.txt

Page 63: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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; }

Ein Objekt anlegen und mit einer Datei "verbinden". Dies bedeutet nicht, dass es diese Datei schon gibt!

wenn Datei existiert, Datei öffnen

Prüfen, ob diese Datei existiert

Dateiinhalt einlesen

Page 64: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 65: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Dateiinhalt ist eine Integer-Zahl (4 Byte groß)

Datei existiert nicht, also Datei anlegen.

Page 66: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

} catch(IOException e){ System.out.println("Fehler: Dateifehler:"); e.printStackTrace(); } }

Exceptions abfangen

Page 67: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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(); }

Methode wird bei jeder Anfrage aufgerufen

Zähler erhöhen

neuen Zählerwert zurückschreiben

Page 68: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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

Page 69: Internet-Technologien und Java. Beispiel:  Im Browser wird diese Zeile eingegeben. Wie nennt man diese eingegebene Zeile.

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(); }}