studyklar
IProg · Klausur 2 · Aufgabe 8

JSP mit JSTL: Bewertungen als Tabelle ausgeben

Ein Servlet hat Bewertungen aus der Datenbank geholt; eine JSP-Seite soll sie als Tabelle zeigen. Rechts steht der Rahmen der Seite aus der Klausur; Schritt für Schritt füllt sich eine Lücke nach der anderen. Mit Weiter geht es voran.

Die Aufgabe

8) Servlet und JSP (9 Punkte)

Erstellen Sie nun eine JSP Seite Ausgabe.jsp auf der Bewertungen ausgegeben werden. Die Attribute gid, punkte und txt der Bewertungen sollen dabei in einer Tabelle angezeigt werden.

Die anzuzeigenden Werte wurden in einem Controller-Servlet vor dem Aufruf der JSP folgendermaßen gesetzt:

int p1 = Integer.parseInt(request.getParameter("low"));int p2 = Integer.parseInt(request.getParameter("high"));List<BewertungDTO> b = BewertungDB.findBetweenPunkte(cn, p1, p2);request.setAttribute("bewertungen", b);request.setAttribute("min", p1);request.setAttribute("max", p2);request.getRequestDispatcher("Ausgabe.jsp").forward(request,response);

In der Ausgabe.jsp sollen die Bewertungen unter Nutzung von JSTL ausgegeben werden. Falls keine Bewertungen gefunden wurden, soll eine entsprechende Meldung erscheinen. Achten Sie darauf, das Kommentarfeld gegen XSS-Angriffe abzusichern!

(Der Rahmen der Seite steht rechts.)

Ein Servlet ist eine Java-Klasse auf dem Webserver, die Anfragen bearbeitet. Die Anfrage des Browsers heißt Request; Servlet und JSP teilen sich denselben Request, und setAttribute legt Werte darin ab. Hier ist es der Controller: Es liest die Grenzen aus dem Formular, holt die Bewertungen mit findBetweenPunkte und gibt die Arbeit an die Seite Ausgabe.jsp weiter.

Eine JSP (Jakarta Server Pages) ist eine HTML-Seite mit eingebetteten Teilen, die der Server vor dem Senden ausführt. JSTL (JSP Standard Tag Library) liefert dafür fertige Tags wie Schleifen und Bedingungen, so dass kein Java-Code in der Seite steht.

Gesucht sind die drei mit XXX markierten Stellen: Überschrift, Meldung bei leerer Liste, Tabelle. Dazu Schutz vor XSS (Cross-Site-Scripting) beim Kommentar. Für die Aufgabe gibt es 9 Punkte.

Merke: Text, den ein Benutzer eingegeben hat, gibt man nie roh aus. In JSTL übernimmt c:out das Maskieren.
  1. Was das Servlet in den Request legt.
  2. Die Tag-Bibliothek und die Überschrift mit den Grenzen.
  3. Die Meldung, falls nichts gefunden wurde.
  4. Die Schleife und je Bewertung eine Tabellenzeile.
  5. Der Kommentar mit c:out gegen XSS.

Liste und Grenzen liegen im Request

List<BewertungDTO> b = BewertungDB.findBetweenPunkte(cn, p1, p2);request.setAttribute("bewertungen", b);request.setAttribute("min", p1);request.setAttribute("max", p2);request.getRequestDispatcher("Ausgabe.jsp").forward(request,response);

Das Servlet ruft findBetweenPunkte auf und bekommt eine List<BewertungDTO>. Mit setAttribute legt es drei Werte unter einem Namen in den Request: die Liste als bewertungen, die Grenzen als min und max.

forward gibt denselben Request an Ausgabe.jsp weiter. Die Seite kann die drei Attribute darum unter genau diesen Namen lesen. Diese Namen braucht man gleich in der JSP, nicht die Java-Variablen b, p1, p2.

Aus Klausur 2, Aufgabe 7 („JDBC: Bewertungen zwischen zwei Punktzahlen lesen“): findBetweenPunkte(cn, min, max) liefert eine Liste von BewertungDTO; ohne Treffer ist sie leer.
Aus Skript 08, Folie 22: Im Servlet übergibt request.setAttribute("personen", pList) Daten an die Seite, die die Ausgabe erzeugt.

Die Tag-Bibliothek einbinden

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

Zeile 2 steht schon da. Sie bindet die Kern-Tags der JSTL ein und gibt ihnen das Präfix c. Darum heißen alle Tags dieser Seite c:if, c:forEach, c:out.

Die Werte holt man mit der Expression Language (EL, Ausdruckssprache): ${name} setzt das Attribut mit diesem Namen ein. So greift die Seite auf bewertungen, min und max zu.

Aus Skript 08, Folie 28: JSP-Seiten betten Code und spezielle Aktionen in HTML ein und werden vor der Ausführung in Servlet-Code übersetzt.
Noch 6 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 1Was das Servlet übergibt

Attribute im Request

int p1 = Integer.parseInt(request.getParameter("low"));int p2 = Integer.parseInt(request.getParameter("high"));List<BewertungDTO> b = BewertungDB.findBetweenPunkte(cn, p1, p2);request.setAttribute("bewertungen", b);request.setAttribute("min", p1);request.setAttribute("max", p2);request.getRequestDispatcher("Ausgabe.jsp").forward(request,response);
LegendeZeilen des SchrittsDer Rahmen der Seite Ausgabe.jsp: Die Lücken sind noch leer, sie füllen sich Schritt für Schritt.