1 / 18

Internetzugriff mit Strings und Streams

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()) );

ethan
Télécharger la présentation

Internetzugriff mit Strings und Streams

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. 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 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  2. 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); Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  3. Ein HTTP-Client import java.io.*; import java.net.*; public class HttpClient { public static void main( String[ ] args ) { try { Socket socket = new Socket("192.168.1.101", 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); } } } Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  4. 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/1.0 200 "); 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); } } } Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  5. RMI und Objektserialisierung RMI: Aufruf von Methoden in entfernt definierten Klassen RMI-Server RMI-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 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  6. RMI-Code (Client) Entfernter Server (Typ=interface) 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://192.168.1.101/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 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  7. 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); } } } Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  8. 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 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  9. 3-Tier-Architecktur mit RMI HTML-Seite Produkt-datenbank Eingabe Browser Applet Business- Logik (Java) DB-Zugr. Programm RMI RMI Client Application-Server DB-Server + 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) Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  10. 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 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  11. 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 Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

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

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

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

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

  16. JSP mit taglib <HTML> // beispiel1.jsp <%@ taglib uri="/bsplib" prefix="jsplib" %> <H1>Willkommen in unserem Internetshop</H1> <P>Preisliste von <jsplib:getDay/> ist ... </P> <jsplib:ifIs timeOfDay="PM"> Sonderangebot vor Ladenschluß ... </jsplib:ifIs> </HTML> <taglib> // Ausschnitt aus bsplib.tld <tag> <name>getDay</name> <tagclass>beispiel1.GetDayTag</tagclass> </tag> <tag> <name>ifIs</name> <tagclass>beispiel.IfIsTag</tagclass> <attribute> <name>timeOfDay</name> <required>true</required> </attribute> </tag> </taglib> Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  17. Taglib - Datei <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>bsplib</shortname> <tag> <name>getDay</name> <tagclass>beispiel1.GetDayTag</tagclass> </tag> <tag> <name>ifIs</name> <tagclass>beispiel.IfIsTag</tagclass> <attribute> <name>timeOfDay</name> <required>true</required> </attribute> </tag> </taglib> Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

  18. 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) Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher - WS 2000/01

More Related