18
Datenbanken 2 - Java- Server-RMI-Servlets - Prof. Dr. Stefan Böttcher Internetzugriff mit Internetzugriff mit Strings und Streams 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 {

Internetzugriff mit Strings und Streams

  • Upload
    ethan

  • View
    27

  • Download
    0

Embed Size (px)

DESCRIPTION

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()) ); - PowerPoint PPT Presentation

Citation preview

Page 1: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Internetzugriff mit Strings und StreamsInternetzugriff mit Strings und StreamsLesen 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

Page 2: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Internetzugriff über SocketsInternetzugriff ü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);

Page 3: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Ein HTTP-ClientEin HTTP-Clientimport 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 sofortString 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); } }}

Page 4: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Einfacher HTTP-SpiegelserverEinfacher HTTP-Spiegelserverimport 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); } }}

Page 5: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

RMI und ObjektserialisierungRMI und ObjektserialisierungRMI: 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

Page 6: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

RMI-Code (Client) 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://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

Entfernter Server (Typ=interface)

Page 7: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

RMI-Code (Server) 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); } }}

Page 8: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

RMI: Arbeitsweise / Codegenerierung RMI: Arbeitsweise / Codegenerierung 1. Alle Java-Programme übersetzen:

javac *.java

2. Das Server-Programm vorübersetzen mit rmicrmic RemoteBankServer

erzeugt Code zum Datentransfer über das Netz

3. Einen Registrierungsprozeß für rmi-Server startenFenster1: rmiregistry

4. Das Server-Programm startenFenster2: RemoteBankServer

5. Das Client-Programm startenFenster3 (evtl. auf einem anderen Rechner): Bank ab xy

Page 9: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

3-Tier-Architecktur mit RMI3-Tier-Architecktur mit RMI

BrowserApplet

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)

Page 10: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

RMI: ÜbungRMI: Übung1. 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 *.java3. Das Server-Programm vorübersetzen mit rmic

> rmic RemoteBankServer erzeugt Code zum Datentransfer über das Netz4. Einen Registrierungsprozeß für rmi-Server starten

Fenster1: > rmiregistry5. Das Server-Programm starten

Fenster2: > java RemoteBankServer6. Das Client-Programm starten

Fenster3 (evtl. auf anderem Rechner): > java Bank ab xy

Page 11: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Java Server Pages (JSP)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

Page 12: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Java Server Pages (Beispielausgabe)Java Server Pages (Beispielausgabe)JSP-Verzeichnis JSP-Seite

Layout (+konstanter Inhalt) dynamischer Inhalt Layout

Page 13: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Java Server Pages (JSP)Java Server Pages (JSP)

clock.jsp

.class-Files

http://localhost:8080/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

Page 14: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Java Server Pages (Beispiel)Java Server Pages (Beispiel)

import java.util.*; // Clock.Javapublic 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>

Page 15: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

JSP (Trennung von Design und Logik)JSP (Trennung von Design und Logik)

JSP-Seite

.class-Files

Eingabe

Web-Browser

AusgabeWeb-Seite (html)

JSP-Web-Server

Servlet (.java)

Java-Klasse(n)

Client Server

Web-Designer

Program-mierer

Page 16: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

JSP mit taglibJSP 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>

Page 17: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Taglib - Datei 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>

Page 18: Internetzugriff mit Strings und Streams

Datenbanken 2 - Java-Server-RMI-Servlets - Prof. Dr. Stefan Böttcher

- WS 2000/01

Zusammenfassung 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)