Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Internetzugriff mit Strings und Streams Lesen aus dem Internet (über.

Ähnliche Präsentationen


Präsentation zum Thema: "Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Internetzugriff mit Strings und Streams Lesen aus dem Internet (über."—  Präsentation transkript:

1 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Internetzugriff mit Strings und Streams Lesen aus dem Internet (über URL) URL url = new URL( "http://www.upb.de/cs/boettcher/willkommen.htm"); BufferedReader einURL = new BufferedReader( new InputStreamReader(url.openStream()) ); String s = einURL.readLine() ; //... Ausnahmen abfangen (bei allen Leseoperationen) try { //... Leseoperationen } catch(Exception e) { System.out.println(e); } // Ausnahmen abfangen

2 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Internetzugriff über Sockets Andere Rechner sind genauso zugreifbar wie lokale Dateien in Java über Eingabe- bzw. Ausgabe-Ströme String host = paris.uni-paderborn.de"; Socket socket = new Socket(host, 13); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); String zeit = in.readLine(); System.out.println(Die Zeit auf Rechner " + host + " ist " + zeit);

3 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Ein HTTP-Client import java.io.*; import java.net.*; public class HttpClient { public static void main( String[ ] args ) { try { Socket socket = new Socket(" ", 8080 ); BufferedReader from_server = new BufferedReader( new InputStreamReader( socket.getInputStream() ) ) ; PrintWriter to_server = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); // Sende HTTP GET Kommando zum Web server und welche Seite to_server.println("GET /start.html"); to_server.println(); to_server.flush(); // sende sofort String zeile = from_server.readLine() ; while ( zeile != null ) { System.out.println( zeile ) ; zeile = from_server.readLine() ; } socket.close(); // Wenn alles gelesen ist, schließe Socket } catch (Exception e) { System.out.println(e); } }

4 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Einfacher HTTP-Spiegelserver import java.io.*; import java.net.*; public class HttpSpiegel { public static void main(String args[]) { try { ServerSocket ss = new ServerSocket(8080); // Service einrichten for(;;) { Socket client = ss.accept( ); // warte bis ein Client sich anmeldet BufferedReader in = new BufferedReader( new InputStreamReader( client.getInputStream( ) ) ); PrintWriter out = new PrintWriter( new OutputStreamWriter( client.getOutputStream( ) ) ); out.println("HTTP/ "); out.println("Content-Type: text/plain"); out.println( ); out.flush( ); String zeile = in.readLine( ) ; while( zeile != null && zeile.length( ) != 0 ) { out.println( zeile ); zeile = in.readLine() ; } out.close( ); in.close( ); client.close( ); } // for: Warte auf nächsten Client } catch (Exception e) { System.out.println(e); } }

5 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 RMI und Objektserialisierung RMI: Aufruf von Methoden in entfernt definierten Klassen RMI-ServerRMI-Client RMI-Verbindung Registrierung via rmiregistry RMI-Compiler erzeugt aus Klassen Stubs und Skeleton-Klassen Binden der Objekte, dann Aufruf wie bei lokalen Objekten Serialisierung: Objekte werden als Datenstrom übertragen

6 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 RMI-Code (Client) import java.rmi.*; public class Bank { public interface RemoteBank extends Remote { // interface für Server public String conc(String s1, String s2) // was Server bietet throws RemoteException ; } public static void main(String[] args) { try { // Suche Server mit Name "bankname" RemoteBank bank = // Serverobjekt (RemoteBank) Naming.lookup("rmi:// /bankname"); String ret = bank.conc(args[0], args[1]); // Aufruf an Serverobjekt System.out.println(ret) ; } // Fange und zeige RMI-Exceptions catch (Exception e) { System.out.println(e); } } // main } IP Servicename Entfernter Server (Typ=interface)

7 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 RMI-Code (Server) import java.rmi.*; import java.rmi.server.*; import Bank.*; // lade das Interface für RemoteBank public class RemoteBankServer extends UnicastRemoteObject implements RemoteBank { public RemoteBankServer() throws RemoteException { super(); } // Implementierung der Remote-Methode conc aus Interface RemoteBank public synchronized String conc (String s1, String s2) throws RemoteException { System.out.println( s1 + " :: " + s2 ) ; return s1+s2 ; } public static void main(String[] args) { try { RemoteBankServer bank = new RemoteBankServer(); // erzeugt Serverobjekt Naming.rebind("bankname", bank); // sein Name ist "bankname" System.out.println("bankname ist bereit."); } catch (Exception e) { System.err.println(e); }

8 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 RMI: Arbeitsweise / Codegenerierung 1. Alle Java-Programme übersetzen: javac *.java 2. Das Server-Programm vorübersetzen mit rmic rmic RemoteBankServer erzeugt Code zum Datentransfer über das Netz 3. Einen Registrierungsprozeß für rmi-Server starten Fenster1: rmiregistry 4. Das Server-Programm starten Fenster2: RemoteBankServer 5. Das Client-Programm starten Fenster3 (evtl. auf einem anderen Rechner): Bank ab xy

9 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 3-Tier-Architecktur mit RMI Browser Applet Produkt- datenbank HTML- Seite Client Application-Server DB-Server RMI Eingabe Business- Logik (Java) DB-Zugr. Programm RMI + Session-Konzept erlaubt zwischenzeitliche Interaktion + Last zwischen Client und Applicationserver frei verteilbar + in der Regel geringere Serverlast (verteilt auf 2 Server) +/- Client muß Java-fähige Browser nutzen - Server müssen Java-fähige Schnittstelle bieten (Java/Corba)

10 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 RMI: Übung 1. Kopieren Sie die RMI-Programme (z.B. vom Dozentenrechner) in ein Verzeichnis auf Ihrem Rechner und ändern Sie Bank.java so, daß die IP Ihres Rechners eingetragen ist. 2. Alle Java-Programme übersetzen: > javac *.java 3. Das Server-Programm vorübersetzen mit rmic > rmic RemoteBankServer erzeugt Code zum Datentransfer über das Netz 4. Einen Registrierungsprozeß für rmi-Server starten Fenster1: > rmiregistry 5. Das Server-Programm starten Fenster2: > java RemoteBankServer 6. Das Client-Programm starten Fenster3 (evtl. auf anderem Rechner): > java Bank ab xy

11 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Java Server Pages (JSP) Bisher: HTML - statische Seiteninhalte php,... - dynamische Seiteninhalte, nicht typsicher und portabel Servlets - dynamische Seiteninhalte, typsicher und portabel, aber keine Trennung von Layout, Logik und Daten Neu: JSP - dynamische Seiteninhalte, typsicher und portabel, und Trennung von Layout, Logik und Daten

12 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Java Server Pages (Beispielausgabe) JSP-Verzeichnis JSP-Seite Layout (+konstanter Inhalt) dynamischer Inhalt Layout

13 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Java Server Pages (JSP) clock.jsp.class-Files /beispiel1/clock.jsp Web-Browser Willkommen in... Preisliste von Mo. 22.Jan 21:55... Web-Seite (html) JSP-Web-Server Servlet (.java) Clock.Java Client Server

14 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Java Server Pages (Beispiel) import java.util.*; // Clock.Java public class Clock { public String getDay() { return "Datum und Uhrzeit ist: " + new Date() } } // clock.jsp Willkommen in unserem Internetshop Preisliste von ist...

15 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 JSP (Trennung von Design und Logik) JSP-Seite.class-Files Eingabe Web- Browser Ausgabe Web-Seite (html) JSP-Web-Server Servlet (.java) Java-Klasse(n) Client Server Web- Designer Program- mierer

16 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 JSP mit taglib // beispiel1.jsp Willkommen in unserem Internetshop Preisliste von ist... Sonderangebot vor Ladenschluß... // Ausschnitt aus bsplib.tld getDay beispiel1.GetDayTag ifIs beispiel.IfIsTag timeOfDay true

17 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Taglib - Datei bsplib getDay beispiel1.GetDayTag ifIs beispiel.IfIsTag timeOfDay true

18 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Zusammenfassung Vorteile von Java für Internet-Programmierung : + Portabitität + Applets (Eingabe-Fehler auf Clientseite abfangen) + Servlets (Serverprogramm: portabel, effizient, sicher) + Java Server Pages (trennt Layout von Logik u. Daten) + JDBC + verteilte Anwendungen (Socket, RMI,...) + Internet-Zugriff + Server-Implementierungen + Sicherheit für Server und Client +/- effizient (nicht immer ganz so schnell wie C/C++) +/- typsichere Entwicklung - nicht: quick (and dirty)


Herunterladen ppt "Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01 Internetzugriff mit Strings und Streams Lesen aus dem Internet (über."

Ähnliche Präsentationen


Google-Anzeigen