studyklar
IProg · Klausur 1 · Aufgabe 8

Termine mit JSP und JSTL ausgeben, sicher gegen XSS

Ein Servlet hat Termine gesucht, eine JSP-Seite soll sie zeigen. Drei Lücken sind zu füllen, und die Seite muss gegen XSS sicher sein. Rechts steht der Code im Stand des aktuellen Schritts. Mit Weiter geht es Lücke für Lücke voran.

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.

Aus Aufgabe 7 („JDBC: Termine einer Rubrik ab einem Datum lesen“): getTerminFromRubrikDatum(cn, rid, datum) liefert eine Liste von TerminDTO; jedes hat die Getter getTid, getDatum, getTxt und getRid.
Merke: Alles, was ein Nutzer eingegeben haben kann, wird in der JSP mit <c:out value="…"/> ausgegeben, nicht direkt.
  1. Lesen, was das Servlet in den Request legt.
  2. Die taglib-Zeile verstehen.
  3. Lücke 1: Suchparameter ausgeben.
  4. Lücke 2: Meldung ohne Treffer.
  5. Lücke 3: die Tabelle der Treffer.
  6. Prüfen, wo XSS droht und wie c:out schützt.

Was das Servlet weitergibt

request.getParameter liest die Werte aus der Anfrage, als Strings. Integer.parseInt macht aus der Rubrik eine Zahl, Date.valueOf aus "2026-07-01" ein Datum.

request.setAttribute(name, wert) legt einen Wert unter einem Namen in den Request. Drei Namen gibt es: termine (die Liste), rid und datum. Unter genau diesen Namen findet die JSP sie wieder.

forward reicht den Request an Termine.jsp weiter. Die Seite sieht also dieselben Attribute.

Aus Skript 08, Folie 22: Im Servlet: request.getParameter("p1") liest einen Formularwert, request.setAttribute("personen", pList) gibt Daten an die Seite.

Die taglib-Zeile

<%@taglib … prefix="c" %> bindet die Kern-Tags von JSTL ein. Ab jetzt beginnt jeder dieser Tags mit c:, etwa c:if, c:forEach und c:out. Ohne diese Zeile kennt die Seite sie nicht.

Werte holt man mit der Expression Language (EL): ${name} sucht ein Attribut mit diesem Namen und setzt seinen Wert ein.

Noch 5 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1

<!-- 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>
LegendeDie Seite Termine.jsp mit den drei leeren Lücken.