Skript vom 28.5.2003 - IFIS Uni Lübeck

Werbung
Praktikum Datenbanksysteme
Ho Ngoc Duc
IFIS – Universität zu Lübeck
28.05.2003
Nullwerte und Primitive Typen
• Wenn parent==null, was wird in der
Datenbank gespeichert?
• Wenn man aus der DB liest, wie kann man
feststellen, dass das Node gar kein Parent
hat?
• Falsch: rs.readInt("parent_id") == -1,
rs.readObject("perent_id") == null ?
log/effendi.txt:java.lang.ClassCastException: ifis.dbp03.effendi.model.User
log/gehrmann.txt:java.lang.ClassCastException: ifis.dbp03.gehrmann.model.User
log/hennings.txt:java.lang.NullPointerException
log/hennings.txt:java.lang.NullPointerException
log/reher.txt:java.lang.ClassCastException: java.util.Vector
log/reher.txt:java.lang.NumberFormatException: admin
log/reher.txt: at java.lang.Exception.<init>(Exception.java:42)
log/reher.txt: at java.lang.RuntimeException.<init>(RuntimeException.java:47)
log/reher.txt: at java.lang.IllegalArgumentException.<init>(IllegalArgumentException.java:43)
log/reher.txt: at java.lang.NumberFormatException.<init>(NumberFormatException.java:43)
log/schlicht.txt:java.lang.NumberFormatException: root
log/schlicht.txt:
at java.lang.Exception.<init>(Exception.java:42)
log/schlicht.txt:
at java.lang.RuntimeException.<init>(RuntimeException.java:47)
log/schlicht.txt:
at
java.lang.IllegalArgumentException.<init>(IllegalArgumentException.java:43)
log/schlicht.txt:
at
java.lang.NumberFormatException.<init>(NumberFormatException.java:43)
log/schlicht.txt:java.lang.NumberFormatException: admin
log/schlicht.txt:
at java.lang.Exception.<init>(Exception.java:42)
log/schlicht.txt:
at java.lang.RuntimeException.<init>(RuntimeException.java:47)
log/schlicht.txt:
at
java.lang.IllegalArgumentException.<init>(IllegalArgumentException.java:43)
log/schlicht.txt:
at
java.lang.NumberFormatException.<init>(NumberFormatException.java:43)
log/schlicht.txt:java.lang.NullPointerException
log/schlicht.txt:java.lang.NullPointerException
log/wilken.txt:java.lang.ClassCastException: java.util.Vector
log/wilken.txt:java.lang.NullPointerException
log/wilken.txt:java.lang.ClassCastException: java.util.Vector
findNodesByParent()
• Möglich:
"select id from node where parent_id = ?";
List ls = new Vector();
while (…) {ls.add(findNodeByID(id));}
ls.toArray();
• Sehr aufwändig. Soll vermieden werden. Besser:
List ls = new Vector();
"select * from node n, hierarchy h where n.parent_id = ?";
while (…) {ls.add(getHierarchyFromRow(rs);}
"select * from node n, mediaobject where n.parent_id = ?";
while (…) {ls.add(getMediaObjectFromRow(rs);}
Blatt 5
•
•
•
•
•
•
Meist richtig
Pahl [findNodeByID(id, parent)]
Effendi
Pfützenreuter
Reher
Strauch
Nächste Schritte
• Ziel: Web-Anbindung von Datenbanken
• Werkzeuge:
– HTML-Programmierung
– Servlet/JSP
• Nächstes Aufgabenblatt: Jakarta Tomcat
einrichten, einfache Servlets schreiben
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
HTML
• HyperText Markup Language. Sprache, in der
Webseiten geschrieben sind
<html>
<head>
<title>Eine Beispielseite</title>
</head>
<body>
<h1>Überschrift</h1>
<p>Ein ziemlich sinnfreier Text, der nur
demonstrieren soll, was HTML ist</p>
</body>
</html>
HTML Request und Response
• HTTP Request (Client: Browser, Programme)
– URL
• http://server:port/pfad/seite?param1=wert1&param2=wert2
• http://localhost:8080/demo/add?x=12&y=13
– Methode (GET/POST/… )
– Body (z. B: Parameter bei POST, Datei-Uploads… )
– Diverse andere Informationen (Header)
• HTTP Response (Web-Server)
– Angeforderte Datei (HTML, GIF, … )
– Diverse andere Informationen (Header)
Servlet API
• Anwendungsprogrammierschnittstelle für
server-seitige Java-Programme
• Servlet: gewöhnliche Java-Klasse, mit der
sich der Webserver beliebig erweitern läßt
• Servlets stellen Dienste für den Client
bereit, die dieser anfragen kann
• Anfrage und Antwort über Datenströme
• Servlet API bietet Unterstützung für
Cookies und ein Session-Management
Servlet implementierung
• Typisch: Unterklasse von HttpServlet oder
GenericServlet
• doGet() oder/und doPost() überschreiben
• Alternativ: service() überschreiben
HelloWorld-Servlet
1:import java.io.*;
2:import java.util.Date;
3:import javax.servlet.*;
4:
5:public class HelloWorld extends
javax.servlet.GenericServlet {
6: public void service(ServletRequest req,
ServletResponse res){
7: res.setContentType("text/html");
8: PrintWriter out = res.getWriter();
9: Date d = new Date();
10:
out.println("<html><head></head><body>" +
11:
"Hello World am " + d.toString() +
12:
"</body></html>");
13: }
14:}
Browser
,QWHUQHW
:HEVHUYHU
VorlesungsVerzeichnis.html
6HUYOHW(QJLQH
Servlet
S e r v lV
er
tl V r z
S e r v lVertl V r z
VrlVrz
-'%& (Java
Database Conn.)
'DWHQEDQN
Aufruf eines Servlets
• Anfrage: HTTP Request
– URL in Browser eingeben (GET)
– HTML Link klicken (GET)
– HTML Formular abschicken (GET/POST)
• Verarbeitung: Parameter holen, Datenbank
abfragen, Berechnungen durchführen etc.
• Ergebnis: HTTP Response
– Wird vom Browser angezeigt
– Evtl. automatisch weitere Requests, etwa Bilder
Input/Output
• Request-Objekt enthält Anfrageparameter
request.getParameter(String paraName)
• Response-Objekt stellt Ausgabekanal zur
Verfügung
response.getWriter() für Textausgabe
response.getOutputStream() für Binärdaten
GET-Methode mit Hyperlink
<html>
<head>
<title>Calculator</title>
</head>
<body>
<a href="servlet/sep.CalculatorServlet?x=12&y=13">
Berechnung starten
</a>
</body>
</html>
GET Methode mit Formular
<html>
<head>
<title>Calculator</title>
</head>
<body>
<form action="servlet/sep.CalculatorServlet">
X: <input type="text" name="x">
Y: <input type="text" name="y">
<input type="submit">
</form>
</body>
</html>
POST Methode (nur Formular)
<html>
<head>
<title>Calculator</title>
</head>
<body>
<form action="servlet/sep.CalculatorServlet" method="post">
X: <input type="text" name="x">
Y: <input type="text" name="y">
<input type="submit">
</form>
</body>
</html>
Vergleich GET / POST
• GET Methode
– Parameter sind Bestandteil des URLs
Î Bei Bookmarks werden Parameter
mitgespeichert
Î Ungeeignet für Passwörter
– Links benutzen automatisch GET Methode
• POST Methode
– Parameter werden im Body des Requests
übertragen
– Notwendig z.B. bei Datei-Upload
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CalculatorServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
int x = Integer.parseInt(request.getParameter("x"));
int y = Integer.parseInt(request.getParameter("y"));
PrintWriter out = response.getWriter();
out.println("<html><head><title>MyCalc</title></head>");
out.println("<body>");
out.println("Berechnung: "+x+" + "+y+" = " + (x+y));
out.println("</body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
doGet(request, response);
}
}
Herunterladen