studyklar
IProg · Klausur 3 · Aufgabe 8

JSP mit JDBC: Was macht TEST.JSP?

Eine JSP-Seite zum Lesen: Was tut sie, und was zeigt sie nach drei Eingaben? Rechts steht die Seite, die Zeilen zum aktuellen Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

8) JSP, JDBC (8 Punkte)

Betrachten Sie die folgende JSP-Seite mit Namen TEST.JSP

<html> <body><%  Connection cn = Connection.get_connection();  PreparedStatement ipstmt =          cn.prepareStatement("INSERT INTO Rem(msg) VALUES(?)");  PreparedStatement spstmt =          cn.prepareStatement("SELECT * FROM Rem");   if (request.getParameter("rem") != null) {    ipstmt.setString(1, request.getParameter("rem"));    ipstmt.executeUpdate();  }%>  <h1>Bisher</h1><table><%  ResultSet rset = spstmt.executeQuery ();  int i = 1;  while (rset.next())    out.print ("<tr><td>REM "+ i++ + "</td><td>" +               rset.getString("msg") + "</td></tr>");  cn.close();%>  </table><h1>Ihre Eingabe:</h1>  <form action="TEST.JSP" method="post">    <textarea cols="40" rows="5" name="rem" />    <input type="submit" value="Senden"/>  </form> </body></html>

a) Welche Aufgabe erfüllt TEST.JSP?

b) Geben Sie für 3 beliebige Eingaben die jeweiligen Ausgaben an.

JSP (Jakarta Server Pages, früher JavaServer Pages) ist eine HTML-Seite mit eingestreutem Java-Code. Der Server führt den Java-Code aus und schickt nur das entstandene HTML an den Browser. JDBC (Java Database Connectivity) ist die Java-Schnittstelle zu Datenbanken.

Gefragt ist zweierlei: (a) in Stichworten, was die Seite tut; (b) was der Browser nach drei beliebigen Eingaben anzeigt.

Merke: Eine fremde Seite liest man von oben nach unten, wie der Server sie ausführt. Bei jedem Java-Stück fragt man: Was liest es, was schreibt es, was gibt es aus?
  1. Aufbau: HTML und Java-Stücke.
  2. Verbindung und vorbereitete Anweisungen.
  3. Speichern, Ausgeben, Formular.
  4. Drei Eingaben nacheinander durchspielen.

HTML mit Java-Stücken

<html> <body><%

Alles zwischen <% und %> ist ein Skriptlet: Java-Code, den der Server ausführt. Alles andere ist HTML und geht unverändert an den Browser.

In einem Skriptlet stehen fertige Objekte bereit: request (die Anfrage des Browsers mit ihren Parametern) und out (die Ausgabe an den Browser).

Aus Skript 08, Folie 32: Skriptlets <% … %> betten beliebigen Java-Code in die Seite ein.

Verbindung und zwei vorbereitete Anweisungen

  Connection cn = Connection.get_connection();  PreparedStatement ipstmt =          cn.prepareStatement("INSERT INTO Rem(msg) VALUES(?)");  PreparedStatement spstmt =          cn.prepareStatement("SELECT * FROM Rem");

Zeile 4 holt eine Verbindung zur Datenbank. Eine Methode get_connection() hat JDBC nicht: Connection ist dort nur ein Interface, also eine Beschreibung von Methoden ohne eigenen Code; die Verbindung selbst liefert der Treiber der Datenbank. Gemeint ist eine Hilfsmethode, die eine fertige Verbindung liefert.

Dann entstehen zwei PreparedStatements (vorbereitete Anweisungen): ipstmt fügt eine Nachricht in die Tabelle Rem ein (Rem für „remark“, Bemerkung), mit einem Platzhalter ? für den Text. spstmt liest alle Zeilen der Tabelle.

Aus Skript 09, Folie 11: cn.prepareStatement(sql) bereitet eine Anweisung mit Platzhaltern vor; die Werte setzt man danach mit setString, setInt usw.
Noch 9 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

<html> <body><%  Connection cn = Connection.get_connection();  PreparedStatement ipstmt =          cn.prepareStatement("INSERT INTO Rem(msg) VALUES(?)");  PreparedStatement spstmt =          cn.prepareStatement("SELECT * FROM Rem");   if (request.getParameter("rem") != null) {    ipstmt.setString(1, request.getParameter("rem"));    ipstmt.executeUpdate();  }%>  <h1>Bisher</h1><table><%  ResultSet rset = spstmt.executeQuery ();  int i = 1;  while (rset.next())    out.print ("<tr><td>REM "+ i++ + "</td><td>" +               rset.getString("msg") + "</td></tr>");  cn.close();%>  </table><h1>Ihre Eingabe:</h1>  <form action="TEST.JSP" method="post">    <textarea cols="40" rows="5" name="rem" />    <input type="submit" value="Senden"/>  </form> </body></html>
LegendeDie Seite TEST.JSP, wie sie in der Klausur steht.