Java & Php

SixDark

Erfahrenes Mitglied
Hi!

Ich weiß nicht ob das das richtige Forum ist, aber ich hab echt kein besseres gefunden.

Ich habe folgendes Problem:
Ich möchte ein JAVA-Applet programmieren welches Daten in eine MySQL-DB schreibt. Gut, wie ich das Applet programmiere und Zugriff auf die DB bekomme, ist nicht das Problem. Das Problem ist, dass die MySQL-DB auf einem Server bei einem Web-Hoster liegt, wo ich nicht von außen zugreifen kann/darf. D.h. ich muß die Daten von meinem Applet irgendwie an den Server schicken, der sie dann in die DB schreibt.
Kann ich z.B. die Daten aus meinem Applet nehmen und an ein PHP-Script weitergeben? Wenn ja, wo finde ich da Informationen wie das funktioniert. Ich hoffe auf Hilfe....

MfG
..::Six Dark::..
 
Bau diesen Code entsprechend um. Der Leistet das was du benötigst

Code:
      String protocol = currentPage.getProtocol();
      String host = hostField.getTextField().getText();
      String portString = portField.getTextField().getText();
      int port;
      try {
        port = Integer.parseInt(portString);
      } catch(NumberFormatException nfe) {
        port = -1; // I.e., default port of 80
      }
      String uri = uriField.getTextField().getText();
      URL dataURL = new URL(protocol, host, port, uri);
      URLConnection connection = dataURL.openConnection();
      
      // Make sure browser doesn't cache this URL.
      connection.setUseCaches(false);
      
      // Tell browser to allow me to send data to server.
      connection.setDoOutput(true);
      
      ByteArrayOutputStream byteStream =
        new ByteArrayOutputStream(512); // Grows if necessary
      // Stream that writes into buffer
      PrintWriter out = new PrintWriter(byteStream, true);
      String postData =
        "firstName=" + encodedValue(firstNameField) +
        "&lastName=" + encodedValue(lastNameField) +
        "&emailAddress=" + encodedValue(emailAddressField);
      
      // Write POST data into local buffer
      out.print(postData);
      out.flush(); // Flush since above used print, not println

      // POST requests are required to have Content-Length
      String lengthString =
        String.valueOf(byteStream.size());
      connection.setRequestProperty
        ("Content-Length", lengthString);
      
      // Netscape sets the Content-Type to multipart/form-data
      // by default. So, if you want to send regular form data,
      // you need to set it to
      // application/x-www-form-urlencoded, which is the
      // default for Internet Explorer. If you send
      // serialized POST data with an ObjectOutputStream,
      // the Content-Type is irrelevant, so you could
      // omit this step.
      connection.setRequestProperty
        ("Content-Type", "application/x-www-form-urlencoded");
      
      // Write POST data to real output stream
      byteStream.writeTo(connection.getOutputStream());

      BufferedReader in =
        new BufferedReader(new InputStreamReader
                             (connection.getInputStream()));
      String line;
      String linefeed = "\n";
      resultsArea.setText("");
      while((line = in.readLine()) != null) {
        resultsArea.append(line);
        resultsArea.append(linefeed);
      }
    } catch(IOException ioe) {
      // Print debug info in Java Console
      System.out.println("IOException: " + ioe);
    }
  }
 
Hi nochmal!

Ich hab mir diesen Teil der Programmierung mal genauer angeschaut. Ok, ich hab rausbekommen was dort passiert in jeder Zeile, aber ich möchte mehr! Hast Du evtl. einen Link oder eine andere Ressource, die diese Vorgehensweise näher erläutert?

Code:
String postData =
        "firstName=" + encodedValue(firstNameField) +
        "&lastName=" + encodedValue(lastNameField) +
        "&emailAddress=" + encodedValue(emailAddressField);
Ich denke mal hier werden "firstName", "lastName" und "emailAddress" in Richtung des Servers "geschrieben" bzw. dazu vorbereitet. Was mich nun aber mal genauer interessiert ist, wie kommen diese Daten dort an, damit ich sie weiterverarbeiten kann? Also wie muß ich das PHP-Script aufbauen damit es diese Daten entgegennimmt? Reicht da die Abfrage der Variablen "_GET" bzw. "_POST"? Und wo/wie sage ich der JAVA-Applikation welches Script aufgerufen werden soll?

Viele Fragen dürsten nach Antworten... ;) Aber wie gesagt, wenn Du einen Link etc. hättest wo dies näher erläutert wird was dort passiert, wäre ich überaus dankbar und es wäre sicher ausreichend...

MfG
..::SD::..
 
Zuletzt bearbeitet:
Original geschrieben von SixDark
Reicht da die Abfrage der Variablen "_GET" bzw. "_POST"?
Ja ist wie ein ganz normaler Browser. HTTP Verbindungen funktionieren immer gleich, egal ob der Client ein Applet, ein Browser oder ein Googlebot ist.
Ob GET oder POST erkennst du in den kommentaren:
Code:
// POST requests are required to have Content-Length
      String lengthString =
        String.valueOf(byteStream.size());
      connection.setRequestProperty
        ("Content-Length", lengthString)


Original geschrieben von SixDark


Und wo/wie sage ich der JAVA-Applikation welches Script aufgerufen werden soll?

Du kannst deine Fragen die den Code betreffen hier gern stellen. Aber les dir den Code am besten noch ein bischen durch dann wird dir auch klar was da passiert.
Auf der PHP Seite ändert sich nichts an dem wie der Client (hier das applet) bearbeitet wird. Es verhält sich für ihn wie ein Browser.

Code:
String uri = uriField.getTextField().getText();
URL dataURL = new URL(protocol, host, port, uri);
URLConnection connection = dataURL.openConnection();

URL lässt sich auch so angeben:
URL dataURL = new URL("http://www.playboy.com/poppen.php");
;)

Und weitere Informationen bekommst du wie immer in der API Dokumentation:
http://java.sun.com/j2se/1.3/docs/api/
So könntest du URL Klasse nachschlagen:
http://java.sun.com/j2se/1.3/docs/api/java/net/URL.html
und auch andere beteilligte
 
Hi!

Also ich hab mich jetzt mal mit URL beschäftigt und dort eine Methode gefunden, welche mir persönlich jetzt sogar besser gefällt, weil weitaus einfacher zu händeln:

Code:
getAppletContext().showDocument(http://www.xyz.de/save.php?var1=test);

Wenn ich mein Applet (programmiert mit NetBeans 3.5.1) in der von NetBeans erstellten WebSeite öffne funktioniert es wunderbar. Wenn ich aber das Applet über meinen lokalen Apache aufrufen will sagt er mir das er das Applet nicht initialisieren kann. Könnte das daran liegen, dass ich zur Entwicklung und zum Compilieren das SDK 1.4.2 verwende, aber der IE die JRE 1.3.1_08 verwendet?

Und mal ganz generell, wenn ich meinem PHP-Skript nun ein Array übergeben will, reicht doch diese Methode oben aus, oder wie siehst Du das?

Nochmal zu Deinem Code-Teil:
Code:
String protocol = currentPage.getProtocol();
      String host = hostField.getTextField().getText();
      String portString = portField.getTextField().getText();
Aus welchen Klassen bekomme ich aber "currentPage", "hostField" und "portField" her? Ich hab schon ewig gesucht, finde aber keine Methode, die etwas annähernd brauchbares zurückliefert.

Vielen Dank schon mal für Deine Hilfe!

MfG
..::SD::..
 
Zurück