ich bin gerade am Umsteigen aus der .Net Welt nach Java &Co. .
Ich habe ein kleines Problem wo ich nicht so richtig weiter weiß. Evtl. kann mir ja einer von euch helfen:
Ich habe eine Webseite die mittels Javascript Funktionen über eine Eingabemaske ein paar Funktionalitäten zur Verfügung stellt (Ein/Ausgabe von Werten die weiterverarbeitet werden). Nun möchte ich den Webbrowser umgehen und die Javascript Funktionen direkt aus meiner Java-Anwendung (wird später ein Webservice) aufrufen.
Wie kann ich sowas mit Javabibliotheken lösen?
Ich habe schon Richtung LiveConnect (Klasse netscape.javascript.JSObject) geschaut, bin da aber nicht so richtig schlau draus geworden.
Wie würdet ihr die Sache angehen? Evtl. fällt euch auch ein Stichwort ein, mit dem ich weiter suchen kann.
Wie wäre es mit Mozilla Rhino? Das ist die Javascript Lib von Mozilla, die ist komplett in Java implementiert, ab Java 1.6 fest im Umfang des JDK (JRE glaub ich auch) und Kann einfach über das in Java 1.6 eingeführte ScriptEngine Zeugs instanziert werden
Das LiveConnect von dem du da redest gilt für Applets und nur für Applets. Schliesslich dann auch nur für Applets, die innerhalb eines Contents in einem JavaScript-Fähigen Browser laufen. Soweit ich weiss, war LiveConnect grösstenteils (wenn auch nicht alleine) dafür verantwortlich, das Applets sicherheitstechnisch in Verruf gerieten, weil sie dadurch zusätzlich zu den eigenen Sicherheitslücken auch noch die von JavaScript erbten (z.B. Code-Injection). Ich sag' mal: "Sei froh, das du daraus nicht schlau geworden bist, denn von LiveConnect kann ich nur abraten."
@Noctarius: Rhino? Gleich mal googlen.
Ich hatte nen kleinen Denkfehler ;-)
@maki: Da hast du recht. Ich will ja auch clientseitig mit Javascript arbeiten.
Ich will quasi die Funktion des Webbrowsers (mittels Javascript auf das Webinterface zugreifen) in mein Javaprog bringen.
Ich weiß, ich drück mich grad bissel uneindeutig aus....
Ich habe eine (lokale) Webseite über die serverseitig einige Funktionen zur Verfügung gestellt werden: z.B. Pseudocode
Code:
int summiere(int a, int b)
Derzeit habe ich über den Browser die Möglichkeit mittels Clientside Javascript die Funktion aufzurufen und die Rückgabewerte anzuzeigen.
Was ich möchte:
Ich möchte in meinem Javaprog die Funktionen (z.b. "summiere") des Webservers aufrufen können und auch Rückgabewerte vom Server zurück erhalten.
Geht sowas mit Rhino? Bis jetzt hab ich es nur hinbekommen kleine Javascripte direkt auf dem Client auszuführen...
Du kannst doch einfach die URL abrufen, wie es das JS normal auch macht. Ansonsten gäb es noch HttpUnit das ist ein simulierter Webbrowser mit Javascript Unterstüzung (durch Rhino).
Du kannst doch einfach die URL abrufen, wie es das JS normal auch macht. Ansonsten gäb es noch HttpUnit das ist ein simulierter Webbrowser mit Javascript Unterstüzung (durch Rhino).
Ja, ich könnte mir auch eine eigene HTTP-GET Anfrage bauen. Ich dachte nur, ich kann da gleich die JS-Funktionen in mein Prog einbinden und mir die Handarbeit mit den URLs ersparen...
so richtig gefällt mir der Gedanke den HTTP-Get Aufruf "manuell" zu generieren nicht, da einige Argumente laufzeitabhängig (vom Webserver) sind und ich die nicht jedesmal neu bestimmen möchte. Auf den Server selbst habe ich keinen Einfluß.
Außerdem würd ich mir das Parsen vom HTML-Body der Antwort ersparen wollen bzw. die vorhandenen JS nutzen wollen.
Rhino fehlen halt solche Clientside JS Objekte wie z.B. Document von Hause aus, wenn ich das richtig gelesen habe (bzw. bekomm ich Compilerfehler wie "sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "document" is not defined. (<Unknown source>#1) ..." )
Ich hab mir jetzt doch die HTTP-Get aufrufe selber gebastelt, und komplett auf Javascript verzichtet. Da die Antworten des Webservers "nicht ganz" standartkonform sind, sind die vorgefertigten "Browser-Libs" (httpUnit) nicht damit zurechtgekommen.
Was ich möchte:
Ich möchte in meinem Javaprog die Funktionen (z.b. "summiere") des Webservers aufrufen können und auch Rückgabewerte vom Server zurück erhalten.