René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Fallbeispiel Interprozesskommunikation: Webserver mit Datenbankanbindung

Die drei beteiligten Prozesse

Die drei beteiligten Prozesse sind: der Browser (zum Beispiel Internet Explorer), der Webserver (zum Beispiel Apache) und die Datenbank (zum Beispiel Oracle)
Der Benutzer am Browser möchte eine Datenbankabrage übers Web machen. Wie kommunizieren jetzt diese beteiligten Prozesse?
Der Browser macht einen HTTP Request an den Webserver. Der Webserver ruft das CGI Script auf. Dem CGI Script werden Umgebungsvariablen mitgegeben, die der Kommunikation dienen. Diese sind unter anderem: QUERY_STRING (Das ist, was in der URL dem ? folgt), REMOTE_HOST (falls bekannt), REMOTE_ADDR, HTTP_USER_AGENT und CONTENT_LENGTH bei POST Requests.
Das CGI Script wählt eine Methode, um die Abfrage auf dem Datenbankserver zu machen, zum Beispiel Shared Memory.

Simpler Web Client in Java

Der folgende textbasierte WebClient demonstriert einen HTTP Request. Aufruf mit java WebClient www.somedomain.com.
import java.io.*;
import java.net.*;

public class WebClient {
  public static void main(String[] args) throws IOException {
    Socket         s   = null;
    PrintWriter    out = null;
    BufferedReader in  = null;

    String         host= null;

    if (args.length >= 1) {
      host = args[0];
    }
    else {
      System.out.println("specify a host");
      return;
    }

    try {
        s   = new Socket(host, 80);
        out = new PrintWriter(s.getOutputStream(), true);
        in  = new BufferedReader(new InputStreamReader(s.getInputStream()));

    } catch (UnknownHostException e) {
        System.err.println("Don't know about host: " + host);
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O for "
               + "the connection to: " + host);
        System.exit(1);
    }

    BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
    String userInput;

    out.println("GET / HTTP/1.0");
    out.println("Host: " + host);
    out.println("");

    String webAnswer = null;

    while ((webAnswer = in.readLine()) != null) {
      System.out.println(webAnswer);
    }

    out.close();
    in.close();
    stdIn.close();
    s.close();
  }
}