Parameter dynamisch an Applet übergeben

SpaceTim

Grünschnabel
Hallo allerseits,

ich bin zwar kein Java-Neuling, kenne mich aber nicht so gut in der Kopplung von Java mit anderen Technologien aus bzw. bin auch auf dem Gebiet der Applets nicht besonders geübt.
Folgendes Problem habe ich nun:

Ich habe ein Applet erstellt, welches auf Bilddateien Operationen durchführt. Dazu werden die Bilder zur Laufzeitvon einem Server geladen und dann bearbeitet. Das funktioniert auch soweit ganz gut. Nun soll aber der Nutzerzur Laufzeit die Möglichkeit bekommen, eigene Bilder hochzuladen, die dann vom Applet bearbeitet werden.
Und hier liegt mein Problem. Ich habe PHP-Skripte zum Hochladen der Bilder, zur Ermittlung der URIs der Bilderund zum anschließenden Löschen vom Server, wenn die Nutzersession beendet ist. Ich habe aber leider keine Idee, wie ich

a) dem Applet nun die URLs der hochgeladenen Bilder übergebe
b) die anderen PHP-Skripte aufrufe

zu a)
Parameter kann ich dem Applet ja über das param-Tag der HTML-Seite übergeben, in die das Applet eingebettet ist. Nach meinem Verständnis funktioniert diese Lösung aber nur mit Parametern, die zum Ladezeitpunkt des Applets schon bekannt sind. Bei mir werden die Parameterwerte (die Bild-URIs) ja aber erst dynamisch zur Laufzeit erzeugt. Man
kann zwar PHP-Code in die param-Tags einbetten, aber geht das auch mit so komplexen Funktionen, die eine Liste zurückgeben? Und nach meinem Verständnis wird der eingebettete Code auch nur einmalig beim Herunterladen der HTML-Datei ausgeführt.

zu b)
Das Aufrufen eines solchen PHP-Skripts vom Applet aus ist ja an sich kein Problem, nur geht das auch ohne dass dabei die neue Ressource im Browserfenster lädt (weil dann ist ja mein Applet verschwunden)? Wie man eine URL in einem anderen Tab aufruft (falls das überhaupt geht) suche ich bis jetzt vergeblich.

Vielleicht ist meine Herangehensweise auch falsch und jemand kennt eine bessere? Ich bin für alle Vorschläge offen. Bloß an der Tatsache, dass es ein Applet sein muss (und nicht bspw. ein Servlet) kann ich nichts ändern.

Vielen Dank im Voraus

Tim
 

sheel

I love Asm
Hi und Willkommen bei tutorials.de,

zu a)
Parameter kann ich dem Applet ja über das param-Tag der HTML-Seite übergeben, in die das Applet eingebettet ist. Nach meinem Verständnis funktioniert diese Lösung aber nur mit Parametern, die zum Ladezeitpunkt des Applets schon bekannt sind. Bei mir werden die Parameterwerte (die Bild-URIs) ja aber erst dynamisch zur Laufzeit erzeugt. Man
kann zwar PHP-Code in die param-Tags einbetten, aber geht das auch mit so komplexen Funktionen, die eine Liste zurückgeben? Und nach meinem Verständnis wird der eingebettete Code auch nur einmalig beim Herunterladen der HTML-Datei ausgeführt.
Genau, das passiert alles vor Appletstart.
Was als param Sinn machen würde: Eine Benutzer-ID.

Mit Klassen wie HttpUrlConnection etc.
kannst du das Ergebnis von HTML/PHP-Seiten abrufen, ohne sie im Browser zu öffnen.
Eine PHP-Datei vorbereiten, die einem aufrufenden Applet die Infos über "seine" Benutzer-ID
liefert, und diese regelmäßig oder über einen Aktualisieren-Button etc. aufrufen.

Je nach Bedarf sollte die Kommunikation noch etwas abgesichert werden.
zB. Keine IDs 1,2,3... verwenden, sondern zB. Hashes von Irgendwas, weil man sonst
leicht die Nummer von anderen Benutzern raten kann und deren Bilder etc. bekommen könnte.
Und oder Verschlüsselung der Übertragung etc.etc.

zu b)
Das Aufrufen eines solchen PHP-Skripts vom Applet aus ist ja an sich kein Problem, nur geht das auch ohne dass dabei die neue Ressource im Browserfenster lädt (weil dann ist ja mein Applet verschwunden)? Wie man eine URL in einem anderen Tab aufruft (falls das überhaupt geht) suche ich bis jetzt vergeblich.
Du willst also tatsächlich auch neue Tabs öffnen, oder versteh ich das falsch
(dh.: die neuen Tabs sind nur eine Ausweichlösung zum gleichen Tab
und du brauchst eigentlich die HttpUrlConnection von oben)?
 

SpaceTim

Grünschnabel
Hallo,

Danke für deine Antwort. Das mit der URLConnection hat mir sehr geholfen und ich habe den ersten Teil damit bereits erfolgreich implementiert.
Falls noch jemand anders auf das Thema hier stößt - für die Nutzung der URLConnection in Verbindung mit PHP bietet dieses Tutorial einen guten Überblick:
http://www.developers-guide.net/c/120-wie-man-aus-java-mit-einem-php-script-kommuniziert.html

Zum zweiten Problem:
In dem zweiten Tab wollte ich dem Nutzer ein HTML Formular zum Hochladen seiner Bilder bereitstellen. Wenn ich das Formular im selben Tab lade, in dem schon das Applet läuft, dann wird dieses ja beendet und muss neu gestartet werden. Theoretisch könnte ich den Nutzer auch über einen Java-Dialog die Dateien auswählen lassen (Applet signieren ist kein Problem) und dann auch wieder über eine URLConnection an den Server senden...allerdings ist mir nicht ganz klar wie ich die von einem Java-File-Loader erhaltenen Objekte dann für die Übergabe an das PHP-Skript umwandeln muss. Da erschien mir die Lösung mit einem HTML-Formular am einfachsten.

Mein aktuellster Lösungsansatz war, über die Java ScriptEngine per JavaScript ein PopUp öffnen zu lassen, in dem dann das Upload-Formular angezeigt wird. Das scheitert allerdings daran, dass ich dazu die JavaScript-Funktion "window.open.." aufrufen müsste und der Applet-Container ja keinen Zugriff auf das "window"-Objekt hat. Hast Du dafür evtl. noch eine Lösung parat? Ich habe bis jetzt leider noch keine gefunden.