$K(The Servlet Technology Model) $KK(Http Methods) $R(Objective) For each of the HTTP Methods (such as GET, POST, HEAD, and so on) describe the purpose of the method and the technical characteristics of the HTTP Method protocol, list triggers that might cause a Client (usually a Web browser) to use the method; and identify the HttpServlet method that corresponds to the HTTP Method. $R\ $KKK(Überblick über die Http Methoden) Der Client (i.a. ein Webbrowser) sendet Anfragen an das Servlet und bekommt von diesem Servlet eine Antwort. Ein Servlet ist ein Programm, das auf einem i.a. entfernten Server liegt. Das Servlet liest die Anfragen von seinen Clienten, verarbeitet sie und sendet das Ergebnis i.a an den Clienten zurück. Damit Client und Servlet miteinander kommunizieren können, müssen sie eine gemeinsame Sprache verstehen. Diese gemeinsame Sprache ist durch das [e|Hypertext Transfer Protocol>http://www.w3.org/Protocols/rfc2616/rfc2616.html] definiert. Eine HttpNachricht besteht aus einer # Startzeile # Header # CRLF (Carriage Return und LineFeed also einen Zeilenumbruch) # Nachrichtenrumpf Das erste Wort in der ersten Zeile besteht aus einer Http-Methode. Folgende Http-Methoden sind definiert: # GET - Liest Informationen von Servlet # POST - Gibt dem Servlet Daten zur Verarbeitung # PUT - Gibt dem Servlet Daten zum Speichern # HEAD - Liest i.a. nur MetaInformation vom servlet # DELETE - Dient zum Löschen von Daten auf dem Server # OPTiONS - Fragt dem Servlet nach welche Methoden es versteht. # TRACE - Dient i.a. zum Debuggen Ein Servlet wird in Java durch eine Unterklasse der abstrakten Klasse HttpServlet implementiert. Je nach Http Methode wird in der Klasse HttpServlet eine spezielle Methode ausgeführt. $S() protected void doXXX(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException // XXX steht ist Platzhalter Get,Post, Put, Head, Options, Trace $S\ req enthält die Anfrage die vom Clienten kommt, die Antwort wird in resp geschrieben. Ein einfaches Beispiel: $S() import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DisplayServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { resp.setContentType("text/html"); // Ausgabe ist als Html File zu interpretieren PrintWriter out = resp.getWriter(); out.println("Display Information"); out.println(""); out.println("Hello, World"); out.println(""); } } $S\ Es kann nicht garantiert werden dass eine doGet() nur Informationen liest und keine Verarbeitung macht, es liegt in der Verantwortung des Programmiers diese Konventionen einzuhalten. $KKK(die doGet Methode) * Die Get Methode sollte keine Seiteneffekte haben, d.h keine Änderungen am Server * Die Get Methode sollte wiederholbar sein, und jeweils dasselbe Ergebnis zurückliefern * Die Daten die Get Methode sendet, sind im URL Feld des Browsers sichtbar. * Mit der get Methode kann man nur Ascii Textdaten versenden. * Die meisten Browser limitieren die Anzahl der Zeichen die mitgegeben werden dürfen. * Paramter werden mit einem '&' getrennt. $S() name1=value1&name2=value2&name3=value3 $S\ Wie wird die Methode getriggert? * Eingabe einer URL im AdressFeld des Browser. * Mausclick auf einen Verweis. * Klick auf ein HTML-Formular das die get-Methode verwendet. Beispiel: Beachte beim Ausführen des Formulars, dass die Parameter firstName und lastName in der URL Adresse als Parametername enthalten sind. $S()
Vorname:

Name:

$S\
Vorname:

Name:

$KKK(die doPost Methode) * Die Post Methode dient dazu Daten an einen Server zu senden und diese zu bearbeiten * Typische Anwendung ist in eine newsgroup zu posten, Daten in eine Datenbank zu schreiben. * Es wird nicht erwartet, dass die Methode sicher ist, d.h. keine Änderungen am Servlet zulässt * Es können ASCII und Binary Daten gesendet werden * Die Grösse der gesendeten Daten ist nicht begrenzt * Die gesendeten Daten sind nicht im Browser sichtbar Wie wird die Methode getriggert? * Klick auf ein HTML-Formular das die post-Methode verwendet. Beispiel: Beachte beim Ausführen des Formulars, dass die Parameter firstName und lastName in der URL nicht zu sehen ist. $S()
Vorname:

Name:

$S\
Vorname:

Name:

$KKK(die doPut Methode) * Die Put Methode dient dazu Daten auf einen Server zu senden. * Eine typische Anwendung wäre die Daten mit ftp an einen Server zu senden. * Im Gegensatz zur POST Methode steht nicht die Verarbeitung der Daten im Vordergrund, sondern es die Daten werden lediglich gespeichert * Es können ASCII und Binary Daten gesendet werden * Die Grösse der gesendeten Daten ist nicht begrenzt * Die gesendeten Daten sind nicht im Browser sichtbar Wie wird diese Methode getriggert? * Klick auf ein HTML-Formular das die put-Methode verwendet. $KKK(die doHead Methode) * Die Head Methode ist eine eingeschränkte GET-Methode. Als Antwort wird lediglich der Header zurückgegeben. * Dient z.B zum Synchronisieren von Dateien. Es wird z.B im Header erstmals Attribut lastModified ausgelesen, erst falls Information von Client und Server nicht übereinstimmt, kann die gesamte Information ausgelesen werden. * Es gelten dieselben Einschränkungen wie bei der doGet Methode. $KKK(die doDelete Methode) * Diese Methode wird sehr selten verwendet. * Der Server wird angehalten, eine Information zu löschen. $KKK(die doOptions Methode) * Diese Methode wird noch seltener verwendet. * Der Server wird gefragt welche HttpMethoden er unterstützt. $KKK(die doTrace Methode) * Dient i.a. aussschliesslich zum Debuggen. * Die doTrace Methode wird ein Programmierer i.a. nicht überschreiben.