![]() |
| | LinkBack | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Sesselkleber Registriert seit: 17.01.2005
Beiträge: 626
| Warum sollte ein Java Programm mit einem PHP-Script kommunizieren können? Java ist bekanntlich bestens dafür geeignet Webanwendungen, sogenannte Applets, zu schreiben. Diese Applets werden innerhalb des Browserfensters ausgeführt und laufen innerhalb der JVM (Java-Virtuellen-Maschine). Dies bedeutet auch, dass die Daten des Applets von der Webseite heruntergeladen und lokal auf dem Rechner ausgeführt werden, völlig getrennt von dem Server von dem sie stammen. Die meisten Webspace-Anbieter bieten heute bereits Datenbanken mit ihren Paketen an. Dummerweise nützen die für Applets in den meisten Fällen gar nichts. Da das Applet auf dem lokalen Computer ausgeführt wird müßte das Applet auf die Datenbank des Servers verbinden können. In der Regel wird das durch den Anbieter aus Sicherheitsgründen aus gutem Grund nicht erlaubt und technisch unterbunden. In solchen Fällen bietet der Anbieter mit Sicherheit PHP in seinem Paket an. PHP wird im Gegensatz zu Java auf dem Server interpretiert und ausgeführt. Eine Verbindung von "Außen" zur Datenbank ist also nicht nötig da das PHP-Script auf dem Server läuft ist es nur eine lokale Verbindung. Java kommt als moderne Programmiersprache mit allen Voraussetzungen daher die man braucht um mit einer Webseite zu kommunizieren. Warum sollte man diese Möglichkeit nicht nutzen um doch an die Datenbank des Anbieters zu gelangen um zum Beispiel die Highscore eines Spiels zu speichern? Der Ansatz Damit die Java<->PHP Schnittstelle funktioniert muss auf der PHP-Seite natürlich ein entsprechendes Script verfügbar sein. Das soll aber nicht Thema dieses Tutorials sein. Auf der Java-Seite der Schnittstelle muss es natürlich die Möglichkeit geben mit einer Webseite zu Kommunizieren. Dafür stellt Java die Klasse java.net.URLConnection bereit. Eine Instanz dieser Klasse verschafft man sich sehr leicht über ein Objekt der Klasse java.net.URL mit der Methode openConnection(). Ein kleiner Beispielcode: java Code: Lesen und schreiben java.net.URLConnection stellt die beiden Methoden getInputStream() und getOutputStream() zur Verfügung. Mit ihrer Hilfe erhählt man eine Instanz der entsprechenden Streams und kann diese lesen bzw. darauf schreiben. Hierbei ist aber unbedingt zu beachten, dass der Verbindung erst explizit erlaubt werden muss Daten zu versenden. Dies geschieht mit der Methode java.net.URLConnection.setDoOutput(boolean). Vorher ist zwar das lesen eingehender Daten über den InputStream möglich, nicht jedoch das senden von Daten über den OutputStream. Diese Daten kommen dann via "POST" im PHP-Script an. Das senden der Daten über den OutputStream sollte als String erfolgen, und zwar so wie man es von Daten versendet die via Post übermittelt werden, also in dem folgenden Format: Code: keyname1=value1&keyname2=value2&keyname3[....] Somit hier also eine erweiterung unseres obrigen Beispielcodes: java Code:
Besonderheiten Es liegt in der Natur von Internetseiten, dass sie in einem statischen Zustand vom Server an den Client ausgeliefert werden. Das gilt auch für Webseiten die mit PHP generiert werden. Das was von dem Java-Programm empfangen wird ist das was normalerweise auch als Webseite ausgeliefert wird. Es macht also Sinn erst Daten zu senden und anschließen Daten zu empfangen. Somit hat das PHP-Script Zeit auf die eingehenden Daten zu reagieren. Beispiel: Java fragt: Die 10 besten Scores für Spiel sowieso, das PHP-Script antwortet mit den entsprechenden Daten. Die Verbindung unterscheidet sich also von einer Verbindung über Sockets. Ist der Seitenname nicht korrekt funktioniert zwar das Senden der Daten (wobei die dann wahrscheinlich ins Datennirvana flattern), das Lesen der Daten schlägt aber mit einer java.io.FileNotFoundException fehl. Beispiel: So, und hier das ganze Mal praktisch angewand. Zuerst mal ein PHP-Script für den Server, es tut nichts weiter als die empfangen Daten direkt wieder mit echo auszugeben. Das Script stammt von Ben und ist leicht abgewandelt: PHP-Code: java Code:
Und zuletzt die Klasse mit der wir den Test starten. Wir gehen davon aus, dass das Script unter der URL http://localhost/contest.php erreichbar ist. Hier wird die Schnittstelle zum PHP-Script instanziert, Testdaten gesendet und das Ergebnis empfangen: java Code:
Wenn alles klappt ist folgendes in der Konsole abzulesen: Code: key:foo1=bar key:foo2=bar2 Zur Klarstellung: Wir empfangen die Daten auch wieder im Java-Programm. Das PHP-Script gibt sie nicht in einem Browser aus. Das Java-Programm empfängt die Daten des Scripts wie sie sonst von einem Browser empfangen werden würden. Sollten Fragen oder Ungklarheiten betreffen des Tutorials bestehen, postet bitte in dem entsprechendem Forum. Danke. Dieser Beitrag steht unter einer Creative Commons License ![]() (cc) sparrow (at) developers-guide.net -> German PHP and Java Support-Forum Geändert von Jann Hendrik (03.07.2008 um 10:41 Uhr) Grund: link angepasst |
| |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Java Applet soll Daten an ein PHP Script senden | flanger | Allgemeine Java-Programmierung | 5 | 16.05.2007 16:52 |
| PHP Script alle x Sekunden ausführen | .bat Script? | dsxs | Sonstige Programmiersprachen | 2 | 03.08.2006 12:15 |
| Java Script Hilfe!!! (Platzierung eines Link) | Gamesagent | JavaScript und AJAX | 3 | 08.01.2006 04:54 |
| Java Script & Java | manuel | Allgemeine Java-Programmierung | 8 | 21.12.2005 19:58 |
| [BUCH] Java ist auch eine Insel | kampet | Literatur | 5 | 22.02.2005 14:40 |