Die Aufgabe
Aufgabe 8: Servlet und JSP
Erstellen Sie nun eine JSP-Seite Termine.jsp, auf der Termine ausgegeben werden. Datum und Text der Termine sollen dabei in einer Tabelle angezeigt werden.
Die anzuzeigenden Werte wurden in einem Controller-Servlet vor dem Aufruf der JSP folgendermaßen gesetzt:
int rid = Integer.parseInt(request.getParameter("rid"));Date datum = Date.valueOf(request.getParameter("datum"));List<TerminDTO> t = TerminDB.getTerminFromRubrikDatum(cn, rid, datum);request.setAttribute("termine", t);request.setAttribute("rid", rid);request.setAttribute("datum", datum);request.getRequestDispatcher("Termine.jsp").forward(request, response);In der Termine.jsp sollen die Termine unter Nutzung von JSTL ausgegeben werden. Falls keine Termine gefunden wurden, soll eine entsprechende Meldung erscheinen. Achten Sie darauf, den Code gegen XSS-Angriffe abzusichern!
<!-- Termine.jsp --><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><body> <!-- XXX Hier: Ausgabe Suchparameter --> <h1>Termine der Rubrik </h1> <!-- XXX Hier: Meldung, falls nichts gefunden wurde --> <!-- XXX Hier: Ausgabe der Treffer --> <table> </table></body></html>Die Aufgabe ist aus dem Gedächtnisprotokoll nachgebaut. Das Protokoll nennt: wie in der Probeklausur ein Servlet mit drei zu vervollständigenden Stellen, die Suchmethode aus Aufgabe 7 und den Hinweis, den Code gegen XSS-Attacken wehrhaft zu machen. Aufgabentext und Code haben wir nach Klausur 2, Aufgabe 8 gebaut: Dort ist der Servlet-Code gegeben, die drei Lücken stehen in der JSP-Seite. Punkte nennt das Protokoll nicht.
In eigenen Worten: Das Servlet ist der Controller, eine Java-Klasse auf dem Server. Es liest die Anfrage, sucht die Termine und gibt sie weiter. Die JSP-Seite (Jakarta Server Pages) ist die View: HTML mit eingestreuten Ausdrücken, die der Server ausfüllt. JSTL (JSP Standard Tag Library) liefert dafür fertige Tags für Bedingungen und Schleifen, ganz ohne Java-Code in der Seite.
XSS (Cross-Site-Scripting): Ein Angreifer speichert HTML oder JavaScript als Eingabe, etwa als Text eines Termins. Gibt die Seite diesen Text ungeprüft aus, führt der Browser jedes anderen Besuchers das Skript aus.
getTerminFromRubrikDatum(cn, rid, datum) liefert eine Liste von TerminDTO; jedes hat die Getter getTid, getDatum, getTxt und getRid.<c:out value="…"/> ausgegeben, nicht direkt.- Lesen, was das Servlet in den Request legt.
- Die taglib-Zeile verstehen.
- Lücke 1: Suchparameter ausgeben.
- Lücke 2: Meldung ohne Treffer.
- Lücke 3: die Tabelle der Treffer.
- Prüfen, wo XSS droht und wie c:out schützt.