René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
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(); } } |