1 / 29

Web-Anbindung von Datenbanken

Web-Anbindung von Datenbanken. Übersicht. Applikationslogik auf dem Web-Server: Servlets Motivation Servlet-Tutorial Architektur, Trennung von Applikation und Präsentation Session-Management Datenbankanbindung in Java: JDBC. Warum Servlets?. Servlets Motivation Tutorial

avent
Download Presentation

Web-Anbindung von Datenbanken

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 Web-Anbindung von Datenbanken

  3. Warum Servlets? • Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC • 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 } Web-Anbindung von Datenbanken

  4. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC • Java Servlet Development Kit JSDK 2.0 • ~ag-db/sw/packages/JSDK2.0 • Zwei Packages: • javax.servlet • javax.servlet.http • CLASSPATH enthält • ~ag-db/sw/packages/JSDK2.0/lib/jsdk.jar • Pfade, Referenzen usw. siehe Projektauftrag Web-Anbindung von Datenbanken

  5. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Beispiel 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>"); } } Web-Anbindung von Datenbanken

  6. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Beispiel 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>"); ( ... ) Web-Anbindung von Datenbanken

  7. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Beispiel 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); } } } Web-Anbindung von Datenbanken

  8. <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> • Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Beispiel 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); } } } Web-Anbindung von Datenbanken

  9. Instantiation Loading Initialisation init(ServletConfig config) Ready service(ServletRequest req, ServletResponse res) doGet(ServletRequest req, ServletResponse res) doPost(ServletRequest req, ServletResponse res) Garbage Collection Destruction destroy() • Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Servlet Lebenszyklus Web-Anbindung von Datenbanken

  10. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • 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 Web-Anbindung von Datenbanken

  11. Business-Objekte Servlets • Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Architektur einer Web-Applikation Browser Presentation Layer Business-Objekte Business-Objekte Business Layer Web Server Datenbankzugriff Data Access Layer JDBC Datenbankserver Web-Anbindung von Datenbanken

  12. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Trennen von Applikationscode und BSS (HTML) Schreiben Sie Ihren eigenen Page-Parser Klassenbibliotheken (Objekte exportieren HTML, Umweg über XML) WebMacro HTML hartcodiert (in print-Anweisungen in doGet/doPost) Pro: einfach für Programmierer Con: Web-Designer/Design Tools, Wartbarkeit Server Side Includes SSI (<SERVLET> tag in HTML) Pro: Trennung von BSS und Code Con: Entweder Servlet druckt Häppchen ohne HTML oder man hat wieder hartcodiertes HTML Templates (for common parts of all pages) Pro: Arbeitsersparnis, Wartbarkeit Con: wie SSI Java Server Pages JSP Pro: Nur eine Datei für Code und BSS, kein print Con: Wieder Mix von Applikation und HTML  JavaBeans 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 Web-Anbindung von Datenbanken

  13. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC 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 Web-Anbindung von Datenbanken

  14. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC 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 Web-Anbindung von Datenbanken

  15. Servlets • Motivation • Tutorial • Architektur/Design • Sessions • JDBC Beispiel: HttpSession HttpSessionsession = 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); } } Beliebiges Object Web-Anbindung von Datenbanken

  16. Web-Anbindung von Datenbanken

  17. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht Datenbankanbindung in Java JDBC • Was ist JDBC? • ODBC = Open Database Connectivity • JavaSoft-Spezifikation für herstellerunabhängigesAPI zum Zugriff auf SQL-Datenbankmanagementsystemein • Klassen-/Schnittstellensammlung Funktioniert auch in Servlets  Web-Anbindung von Datenbanken

  18. 1. Treiber laden 2. Verbindung zur DB herstellen 3. SQL-Anweisung erzeugen Protokoll Unterprotokoll Oracle-spez. Rechner Port } 4. Anweisung absenden 5. Ergebnisse verarbeiten 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.*; ... Web-Anbindung von Datenbanken

  19. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht 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 Web-Anbindung von Datenbanken

  20. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht 2-Schicht-Architektur: Java-Anwendung Client-Rechner JDBC DBMS-eigenes Protokoll DBMS Datenbank-Server Web-Anbindung von Datenbanken

  21. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht 3-Schicht-Architektur: Java-Applet oder WWW-Browser Client-Maschine (GUI) HTTP, RMI, CORBA Anwendungsserver Anwendungsserver (Geschäftsprozesse) JDBC DBMS DBMS-eigenes Protokoll Datenbank-Server Web-Anbindung von Datenbanken

  22. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht Das java.sql Package • Wichtig sind zunächst folgende Klassen/Schnittstellen/Ausnahmen: • DriverManager • Connection • Statement • ResultSet • SQLException Web-Anbindung von Datenbanken

  23. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht java.sql.DriverManager • Verwaltet Treiber • Treiber werden durch Aufruf von Class.forName("DriverClassName") registriert • Methoden:Connection getConnection(String url,...); Web-Anbindung von Datenbanken

  24. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht java.sql.Connection • Repräsentiert Verbindung zur Datenbank • Senden von SQL-Anweisungen • Methoden:Statement createStatement();void close(); Web-Anbindung von Datenbanken

  25. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht java.sql.Statement • Ausführung von Anweisungen • Abfrage von Ergebnissen • Drei Typen • Methoden:ResultSet executeQuery(String);int executeUpdate(String);void close(); Web-Anbindung von Datenbanken

  26. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht java.sql.ResultSet • Tabelle mit Ergebnis einer Anweisung • Iterieren mit boolean next(); • Zugriff auf Spaltenwerte mitType getType(String columnName);oderType getType(int columnIndex);Type = {String, Boolean, Byte, Int, Float, ...} Web-Anbindung von Datenbanken

  27. Servlets • JDBC • Einführung • Architekturen • Klassenübersicht java.sql.SQLException • Methoden:String getSQLState();int getSQLErrorCode();SQLException getNextException(); Web-Anbindung von Datenbanken

  28. Web-Anbindung von Datenbanken

  29. Property-Class-Generator PropTest.prp ________________________ test.prp=hello, world test.hello=its me • 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"); • } • } Web-Anbindung von Datenbanken

More Related