Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf...

29
Web-Anbindung von Datenbanken

Transcript of Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf...

Page 1: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

Web-Anbindung von Datenbanken

Page 2: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 2

Übersicht

• Applikationslogik auf dem Web-Server: Servlets– Motivation– Servlet-Tutorial– Architektur, Trennung von Applikation und

Präsentation– Session-Management

• Datenbankanbindung in Java: JDBC

Page 3: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 3

• HTTP: Anforderung von Dokumenten• Problem: Dynamik• Lösungen:

– Client-seitig JavaScript, Applets– Server-seitig CGI, ASP, LiveWire, PHP ...

• Servlets:– Standard-API– Plattformunabhängig Java– Lightweight threads– Stabil

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

}

Warum Servlets?

Page 4: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 4

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

• Java Servlet Development Kit JSDK 2.0~ag-db/sw/packages/JSDK2.0

• Zwei Packages: javax.servletjavax.servlet.http

• CLASSPATH enthält~ag-db/sw/packages/JSDK2.0/lib/jsdk.jar

• Pfade, Referenzen usw. siehe Projektauftrag

Page 5: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 5

ServletsMotivationTutorialArchitektur/DesignSessions

JDBCBeispiel 1: Einfaches Servlet import java.io.*;import java.servlet.*;import javax.servlet.*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); }}

Page 6: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 6

ServletsMotivationTutorialArchitektur/DesignSessions

JDBCBeispiel 2: Request Info

( ... ) out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>Request Information Example</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>Request Information Example</h3>"); out.println("Method: " + request.getMethod()); out.println("Request URI: " + request.getRequestURI()); out.println("Protocol: " + request.getProtocol()); out.println("PathInfo: " + request.getPathInfo()); out.println("Remote Address: " + request.getRemoteAddr()); out.println("</body>"); out.println("</html>"); ( ... )

Page 7: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 7

ServletsMotivationTutorialArchitektur/DesignSessions

JDBCBeispiel 3: Request Header

import java.io.*;import java.servlet.*;import javax.servlet.*;

public class RequestHeaderExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getHeader(name); out.println(name + " = " + value); } }}

Page 8: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 8

ServletsMotivationTutorialArchitektur/DesignSessions

JDBCBeispiel 4: Request Parameters

public class RequestParamExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("GET Request. No Form Data Posted"); }

public void doPost(HttpServletRequest request, HttpServletResponse res) throws IOException, ServletException { Enumeration e = request.getParamterNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getParamter(name); out.println(name + " = " + value); } }}

<html><body>

<form action="RequestParamExample" method=POST>Vorname: <input type=text size=20 name=firstname><br>Nachname: <input type=text size=20 name=lastname><br><input type=submit></form>

</body></html>

Page 9: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 9

ServletsMotivationTutorialArchitektur/DesignSessions

JDBCServlet Lebenszyklus

InstantiationLoading

Initialisationinit(ServletConfig config)

Readyservice(ServletRequest req, ServletResponse res)doGet(ServletRequest req, ServletResponse res)doPost(ServletRequest req, ServletResponse res)

Destructiondestroy()Garbage Collection

Page 10: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 10

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

Web-Server-Konfiguration und URLs

• Standard-Web-Server unterstützen Servlets• JSDK liefert Web-Server mit

(Doku siehe Projektauftrag)servletrunner

•Property-Dateien assoziieren URL mit Servlet• Servlet kann unter vielen Namen angesprochen werden

Page 11: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 11

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

Architektur einer Web-Applikation

Browser

Datenbankserver

Business-ObjekteBusiness-Objekte

Datenbankzugriff

Business-ObjekteServlets

JDBC

Web

Ser

ver Presentation Layer

Business Layer

Data Access Layer

Page 12: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 12

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

Trennen von Applikationscode undBSS (HTML)

HTML hartcodiert (in print-Anweisungen in doGet/doPost)Pro: einfach für ProgrammiererCon: Web-Designer/Design Tools, Wartbarkeit

Server Side Includes SSI (<SERVLET> tag in HTML)Pro: Trennung von BSS und CodeCon: Entweder Servlet druckt Häppchen ohne HTML

oder man hat wieder hartcodiertes HTMLTemplates (for common parts of all pages)

Pro: Arbeitsersparnis, WartbarkeitCon: wie SSI

Java Server Pages JSPPro: Nur eine Datei für Code und BSS, kein printCon: Wieder Mix von Applikation und HTML JavaBeans

Schreiben Sie Ihren eigenen Page-ParserKlassenbibliotheken (Objekte exportieren HTML,

Umweg über XML)WebMacro

Servlet: Vector personen;contex.put("Persons",personen);

Template: $foreach Person in Persons

<TR><TD>$Person.Name</TD><TD>$Person.Vorname</TD><TD>$Person.Telefon</TD></TR>

$end

Page 13: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 13

HTTP ist zustandslos!

• Ursprünglich Request/Reply-Paradigma• ECommerce, Electronic Banking …:

Speichern von Zustandsinformation über Seitenzugriff / Browersitzung hinaus

• Techniken:– URL Rewriting

(<A HREF="nextpage.html;$sessionid$=AWEIRGTERUT">)

– Cookies

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

Page 14: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 14

Servlet API für Sessions

• javax.servlet.http.Cookie• Viel bequemer und mächtiger:javax.servlet.http.HttpSession– Cookies/URL Rewriting transparent für

Entwickler– Objekte werden gespeichert– Auch über Servlet-Grenzen hinweg

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

Page 15: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 15

Beispiel: HttpSession HttpSession session = request.getSession(true);

out.println("ID " + session.getId()); out.println("Created: " + session.getCreationTime()); out.println("Last Accessed: " + session.getLastAccessedTime());

String dataName = request.getParameter("dataName"); if (dataName != null && dateName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.putValue(dataName, dataValue); }

String[] valueNames = session.getValueNames(); if (valueNames != null && valueNames.length > 0) { for (int i = 0; i < valueNames.length; i++) { String name = valueNames[i]; String value = session.getValue(name).toString(); out.println(name + " = " + value); } }

ServletsMotivationTutorialArchitektur/DesignSessions

JDBC

Beliebiges Object

Page 16: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 16

Page 17: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 17

Datenbankanbindung in Java JDBC

• Was ist JDBC?– ODBC = Open Database Connectivity– JavaSoft-Spezifikation für herstellerunabhängiges API zum Zugriff auf SQL-Datenbankmanagementsystemein

– Klassen-/SchnittstellensammlungFunktioniert auch in Servlets

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 18: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 18

Class.forName("oracle.jdbc.driver.OracleDriver");String url = "jdbc:oracle:thin:@jefe:1521:JEFE";Connection con = DriverManager.getConnection(

url, "aws ", "********");

Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(

"SELECT name, e_mail FROM adressen");

while (rs.next()) {String n = rs.getString("name");String n = rs.getString("e_mail");System.out.println(s + ": " + n);}

#import java.io.*;#import java.sql.*;#import com.sybase.jdbc.*;#import java.util.*;...

1. Treiber laden

2. Verbindung zur DB herstellen

3. SQL-Anweisung erzeugen

4. Anweisung absenden

5. Ergebnisse verarbeiten}Protokoll Unterprotokoll Oracle-spez. Rechner Port

Page 19: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 19

Treiber• Übersetzt JDBC-Aufrufe in

DB-(Hersteller-)spezifische Aufrufe• Verschiedene Typen• Beispiel:

com.sybase.jdbc.SybDriveraus jConnect

• Laden mit Class Loader:Class.forName("com. ... SybDriver");

Dynamisch konfigurierbar

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 20: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 20

DBMS

2-Schicht-Architektur:

JDBC

Java-Anwendung Client-Rechner

DBMS-eigenes Protokoll

Datenbank-Server

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 21: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 21

DBMS

3-Schicht-Architektur:

JDBC

Anwendungsserver

Client-Maschine (GUI)

DBMS-eigenes Protokoll

Datenbank-Server

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Anwendungsserver (Geschäftsprozesse)

HTTP, RMI, CORBA

Java-Applet oderWWW-Browser

Page 22: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 22

Das java.sql Package

• Wichtig sind zunächst folgende Klassen/Schnittstellen/Ausnahmen:

– DriverManager– Connection– Statement– ResultSet– SQLException

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 23: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 23

java.sql.DriverManager

• Verwaltet Treiber• Treiber werden durch Aufruf von Class.forName("DriverClassName") registriert

• Methoden:Connection getConnection(String url,...);

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 24: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 24

java.sql.Connection

• Repräsentiert Verbindung zur Datenbank• Senden von SQL-Anweisungen• Methoden:Statement createStatement();void close();

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 25: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 25

java.sql.Statement

• Ausführung von Anweisungen• Abfrage von Ergebnissen• Drei Typen• Methoden:ResultSet executeQuery(String);int executeUpdate(String);void close();

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 26: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 26

java.sql.ResultSet

• Tabelle mit Ergebnis einer Anweisung • Iterieren mit boolean next();

• Zugriff auf Spaltenwerte mit Type getType(String columnName);oderType getType(int columnIndex);Type = {String, Boolean, Byte, Int, Float, ...}

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 27: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 27

java.sql.SQLException

• Methoden:String getSQLState();int getSQLErrorCode();SQLException getNextException();

ServletsJDBC

EinführungArchitekturenKlassenübersicht

Page 28: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 28

Page 29: Web-Anbindung von Datenbanken. 2.6.99Web-Anbindung von Datenbanken2 Übersicht Applikationslogik auf dem Web-Server: Servlets –Motivation –Servlet-Tutorial.

2.6.99 Web-Anbindung von Datenbanken 29

Property-Class-Generator• PropTest.snippet:• /* This file was generated by PropClassGen from PropTest.prp */• import java.util.*;• import java.io.*;• public class PropTest {• public static Properties properties_;• public static String TEST_PRP,• TEST_HELLO;• static {• properties_ = new Properties();• try {• properties_.load(• new BufferedInputStream(• new FileInputStream(• "/home/sahib/weber/java/mail//PropTest.prp")));• } catch (Exception e) {• System.out.println(e.getMessage());• }• TEST_PRP = properties_.getProperty("test.prp");• TEST_HELLO = properties_.getProperty("test.hello");• }• }

PropTest.prp________________________

test.prp=hello, worldtest.hello=its me