Aufgabe 4

Werbung
HDM Stuttgart, Uwe Schulz
Aufgabensammlung Interaktive Medien 2 – 2006
Bitte lösen Sie die Aufgaben 4-5 in der 3. Semesterwoche (30.3. - 5. 4.2006)
Aufgabe 4
doGet/doPost, HTTP Headerparameter
Es wäre viel zu umständlich, für jede
<html>
Aufgabe ein eigenes Eclipse-Projekt zu
<body>
<h1>Meine IM2-Aufgaben</h1>
erzeugen. Legen Sie deshalb das neue
<a href="servlet/A4">Aufgabe 4 – Header Parameter</a><br>
Java-Tomcat Projekt „im2“an und erstellen
</body>
</html>
Sie im Hauptverzeichnis die nebenstehende
HTML-Seite. Der Link Aufgabe 4 zeigt
auf die relative URL „servlet/A4“. Damit der Link „servlet/A4“ funktioniert, ohne das das Servlet angemeldet ist,
muss in der Konfigurationsdatei <tomcat-home>/conf/web.xml der Servlet-Invoker aktiviert sein (Schritt 6 in
Aufgabe 1).
Bevor Sie das untenstehende Servlet implementieren rufen Sie die Servlet-API Dokumentation in einem Browser
auf. Falls Tomcat läuft, öffnen Sie auf der Startseite(http://localhost:8080) links unter Tomcat Documentation und
dort unter Reference den Link Servle-API-Javadocs. Wenn Tomcat nicht gestartet ist, können die Seiten auch unter
<tomcat-home>/webapps/tomcat-docs/servletapi/index.html geöffnet werden.
Lesen Sie die Beschreibung der abstrakten Klasse HttpServlet, von der ein Servlet abgeleitet wird. Sie hat die
Methoden doGet und doPost um auf die entsprechenden HTTP-Requests zu reagieren.
Damit Servlets sowohl mit GET als auch mit POST gleich funktionieren, schreibt man eine doGet Methode, die
doPost aufruft (oder umgekehrt):
import
import
import
import
java.io.*;
java.util.*;
javax.servlet.*;
javax.servlet.http.*;
public class A4 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head>");
out.println("<title>Aufgabe 4</title></head><body>");
out.println("<h2>IM2 - Aufgabe 4</h2>");
out.println("<p>Today is "+ new Date());
Enumeration headers=request.getHeaderNames();
while(headers.hasMoreElements()){
String name=(String)headers.nextElement();
out.println("<p><b>"+name+"</b>: "+ request.getHeader(name));
}
out.println("</body></html>");
}
}
Um dieses Servlet zu implementieren, fügen Sie die neue Klasse A4 zum Verzeichnis WEB-INF/src im TomcatProjekt „im2“ hinzu. Beim Abspeichern wird es automatisch übersetzt und neu geladen.
Schlagen Sie alle verwendeten Klassen und Methoden nach!
6
HDM Stuttgart, Uwe Schulz
Aufgabe 5
Aufgabensammlung Interaktive Medien 2 – 2006
Dateien binär und formatiert lesen und schreiben
Das klassische Beispiel für eine dynamische Webseite, die sich einen Zustand auf dem Server merkt ist der Zähler,
wie oft eine Seite gerufen wurde:
mport java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class A5 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Aufgabe 5</title></head><body>");
out.println ("<h2>IM2 - Aufgabe 5: Zähler</h2>");
out.println("<p>Sie sind der "+zaehlen(response)+". Besucher auf dieser Seite!");
out.println("</body></html>");
}
/**
* Inkrementiert Zaehler in Datei zaehler.dat und gibt neuen Wert zurück
*/
private int zaehlen(HttpServletResponse response)throws IOException{
int n=0;
File f = new File("zaehler.dat");
try{
if(f.canRead()){
FileReader r = new FileReader(f);
n=r.read();
r.close();
}
FileWriter w = new FileWriter(f);
n++;
w.write(n);
w.close();
}catch(Exception e){response.sendError(500,"I/O Fehler:\n"+e);}
return n;
}
}
Fügen Sie die Klasse A5 zum Verzeichnis WEB-INF/src hinzu und ergänzen Sie index.html um einen Link zu
diesem Servlet. Suchen Sie nach der Datei zaehler.dat um festzustellen, wo sie angelegt wird. Eventuell müssen Sie
einen absoluten Pfadnamen als Dateinamen angeben.
Provozieren Sie einen I/O Fehler indem Sie die Datei auf ein nicht existierendes Verzeichnis legen (z.B. als
Dateinamen x/x/x angeben).
Die Datei zaehler.dat ist eine Binärdatei, sie enthält keinen Text. Schauen Sie sie mit einem Editor an, um das zu
verifizieren.
Ändern Sie Ihr Programm so um, dass es die Textdatei zaehler.txt benutzt. Verwenden Sie dazu einen
LineNumberReader, der im Konstruktor den FileReader als Parameter erhält bzw. einen PrintWriter für die
Ausgabe. Die Methode readLine liest die erste Zeile der Datei, das Ergebnis ist ein String, der mit Integer.parseInt
in eine Zahl umgewandelt werden muss. PrintWriter biete die altbekannte Methode println.
Schlagen Sie alle verwendeten Klassen und Methoden nach!
7
Herunterladen