# GWT mit eig. embedded Webserver?



## tuxedo (30. Jul 2010)

Hi,

hab mal ne Frage (oder zwei) zu Google's GWT, die ich mittels google suche nicht beantworten konnte:

Angenommen ich hab eine stinknormale Serveranwendung in Form eines Konsolenprogramms und ich möchte nun ein kleines webinterface anbieten: Lässt sich hierfür GWT benutzen? 

Wenn ich GWT richtig verstanden habe, dann wird primär Java-Code zu HTML/JavaScript umgeformt, so dass eigentlich für die Konsolenserveranwendung sowas wie ein kleiner embedded Webserver (z.B. NanoHTTPD / NanoHTTPD.java) ausreichen müsste um die vom GWT Compiler generierte Webseite ausliefern zu können.

Was mir noch nicht ganz klar ist: Wie würde in so einem Fall das GWT WebUi mit dem Server kommunizieren um beispielsweise Daten aus einer DB anzuzeigen? Der embedded Webserver müsste da ja irgend eine Schnittstelle anbieten.

Hab in dem Zusammenhang auch was von JSON gelesen. Aber JSON beschreibt ja nur das FORMAT und nicht das WIE...

Hat hier jemand genug Einblick um hier etwas Licht ins Dunkel zu bringen und folgende Fragen zu beantworten:

* Kann ich GWT mit einem embedded Webserver (z.B. wie der oben genannte, nur vielleicht mit ein paar Anpassungen/erweiterungen) laufen lassen?
* Was für (minimale) Anforderungen werden an den Server gestellt um das GWT WebUi mit dem Server kommunizieren zu lassen?

Gruß
Alex


----------



## Tomate_Salat (30. Jul 2010)

Du könntest mit dem Webserver eine URL anbieten und versuchen mit AJAX drüber zu kommunizieren. Oder, du schreibst servlets. Die kannst du in GWT benutzen und kommunizierst damit mit dem server. Dafür musst du halt die GWT-Seite auf einen Tomcat o.ä. laden, aber das sollte denke ich ja kein Problem sein (damit dürfte sich auch die DB frage erledigt haben)


----------



## tuxedo (30. Jul 2010)

Ich komm da noch ein wenig durcheinander...

Wenn ich mit GWT bastle, dann hab ich Java-Code vor mir. Der GWT Compiler macht dann daraus HTML/JavaScript/AJAX. Wie komm ich also mit meinem Java-Code an Daten vom Server? Kann ich da einfach GET Requests auf eine bestimmte URL oder sowas machen?!

Tomcat und Co. sind für dieses Projekt keine Option... Wenn, dann minimalistisch embedded we der NanoHTTPD.


----------



## Tomate_Salat (30. Jul 2010)

Naja, ganz verstehe ich dein Problem jz nicht. Soll der Webserver im Konsolenprogramm implementiert werden oder im GWT(was imho wenig sinn machen würde). Falls 2teres: nein, dafür brauchste sicherlich servlets.

Ansonsten, schauen welche Möglichkeiten GWT dir für AJAX bietet (hab selber eher wenig damit gemacht) und im Notfall: du kannst auch selbst ganz leicht JS in GWT schreiben.


----------



## maki (30. Jul 2010)

Bin nicht mehr auf dem laufenden was GWT betrifft, aber der sog. "hosted mode" läuft doch auf Jetty, der als embedded WebServer bzw. ServletContainer fungiert.


----------



## tuxedo (30. Jul 2010)

> Naja, ganz verstehe ich dein Problem jz nicht. Soll der Webserver im Konsolenprogramm implementiert werden oder im GWT(was imho wenig sinn machen würde).



Ich hab ne Serveranwendung die in der Konsole läuft. Diese würde ich gerne mit einem Webinterface ausstatten. 

Und da man mit Hilfe von GWT sein Webinterface komplett in Java-Code formulieren kann, würde ich gerne GWT benutzen um das Webinterface zu erstellen. 
Damit das Webinterface über's Netzwerk mit dem Browser erreichbar ist, brauch ich ja einen Webserver. Hierfür kommt nur sowas kleines wie der NanoHTTPD in Frage. 

Und die Frage war nun: Kann ich ein GWT UI auch in einem eigenen embedded Webserver (kein Tomcat, kein Servletcontainer, ...) laufen lassen, und das ganze so hinbiegen, dass dieses GWT UI noch auf irgend eine Art und Weise mit dem Server kommunizieren kann, um Daten, die der Server bereit stellt auf der Seite anzuzeigen, und Daten, die ein User im Webinterface eingibt im Server zu speichern.


----------



## Tomate_Salat (30. Jul 2010)

Achso, ja dass du deine Seite über einen eigenen Webserver hostest, sollte kein Problem sein. Dann musst du den Server ja nur anpassen, dass er sich mit dem Konsolenserver verbinden kann und die Anfragen von der WebUI (welche ja nicht zwangsläufig GWT sein muss) weiterleitet. 

Du kannst mit dem Webserver ja die GET und POST übertragungen abfangen und auswerten und daraus die Serveranfrage basteln.

MFG

Tomate_Salat


----------



## Geeeee (30. Jul 2010)

Damit ich/wir das gerade richtig verstehen, fasse ich das mal in einem Satz zusammen:
Du willst dir das Schreiben von (hauptsächlich) JS ersparen indem du GWT nutzt?
Ich halte diese Lösungsvariante ohne einen ServletContainer auf der Serverseite für viel Overhead. Also das Erstellen / Hosten der ClientSeite ist natürlich möglich.
Evtl. gibts eine Möglichkeit, wie man das total einfach auf "einfache Requests" umbiegen kann, aber diese ist mir jedoch nicht bekannt. Also man müsste doch das gesamte Serviceprinzip von GWT ersetzen, oder?
Zusammengefasst denke ich, dass du glücklicher wirst, wenn du plain JS (evtl. mit ner kleinen Lib wie prototype.js) schreibst.


----------



## Tomate_Salat (30. Jul 2010)

Geeeee hat gesagt.:


> Zusammengefasst denke ich, dass du glücklicher wirst, wenn du plain JS (evtl. mit ner kleinen Lib wie prototype.js) schreibst.



Und wo siehst du da den Vorteil?! Letztendlich hast du mit GWT auch eine HTML/JS Seite. Und ich schreibe mir sowas dann doch lieber in Java, lasse es compilieren, als das sich ein eigenes JS schreibe, was (in meinem falle) sicher viel optimierungsbedarf hätte...


----------



## Geeeee (30. Jul 2010)

Gegen das Erstellen der Seite wollte ich nix sagen. Mein Einwand soll eher in Richtung "Kommunikation" gehen. Ich habe "nur" GWT-Erfahrungen mit dem ServicePrinzip und noch nie einen Request an die Serverseite gesendet, der nicht in einem ServletContainer lief und eine Serviceimplementierung für den GWTClient bereit hielt.
Es kann ja recht einfach gehen, nur von meinem Standpunkt und Erfahrungen mit GWT (größtenteils < Version 2x) sehe ich das gerade als kompliziert an.


----------



## Tomate_Salat (30. Jul 2010)

Ja ok, ich kann auch nicht ganz nachvollziehen, warum kein Tomcat drauf darf. Deinen Erfahrungen schließe ich mich an. Aber ich glaube, dass es doch einfacher gehen kann, als es vllt scheint. Man kann ja "native" JavaScript-Methoden in GWT schreiben und darin könnte man sein eigenes AJAX aufbauen. Und zurück gibst du einen String mit der Antwort.

Finde ich in der Theorie immernoch einfacher, als selber das komplett in JS(+libs) zu schreiben.


----------



## tuxedo (30. Jul 2010)

Tomate_Salat hat gesagt.:


> Achso, ja dass du deine Seite über einen eigenen Webserver hostest, sollte kein Problem sein. Dann musst du den Server ja nur anpassen, dass er sich mit dem Konsolenserver verbinden kann und die Anfragen von der WebUI (welche ja nicht zwangsläufig GWT sein muss) weiterleitet.



Okay, das heisst für mich nun im Klartext: GWT Ui basteln, den GWT Compiler drüber laufen lassen, und das was dabei rausfällt über den eigenen, embedded Webserver hosten.



> Du kannst mit dem Webserver ja die GET und POST übertragungen abfangen und auswerten und daraus die Serveranfrage basteln.



Okay, für diese Lösung müsste der Webserver eine Art Queryinterface, ansteuerbar mit GET/POST anbieten, und das GWT UI muss einen entsprechenden Request an dieses Interface stellen.



> Ja ok, ich kann auch nicht ganz nachvollziehen, warum kein Tomcat drauf darf



Das hat andere, leider recht komplizierte Gründe. Im moment schau ich ja nur ob sich mein Vorhaben mit GWT umsetzen lässt ...

Wie schauts mit RPC aus? Hab da oberflächlich was von "GWT RPC" gelesen (Communicating with a Server - Google Web Toolkit - Google Code)...

Zum einen steht da: 



> GWT provides an RPC mechanism based on Java Servlets to provide access to server side resources



Ein klein wenig weiter unten dann wieder:



> GWT does not limit you to this one RPC mechanism or server side development environment. You are free to integrate with other RPC mechanisms, such as JSON using the GWT supplied RequestBuilder class, JSNI methods or a third party library.



Noch weiter unten ist dann ein Beispiel für HTTP Requests aufgeführt:



> If your GWT application needs to communicate with a server, but you can't use Java servlets on the backend — or if you simply prefer not to use RPC — you can still perform HTTP requests manually.



Hmm, das beisst sich doch der Hund in den eigenen Schwanz: Oben steht: RPC geht auch mit anderen Mechanismen, und unten steht quasi das Gegenteil.

Ist hier jemand Fit genug in der Materie um mir ein Beispiel oder Link zu nennen, in dem GWT mit RPC aber ohne Servlets genutzt wird?!

Oder steh ich hier auf'm Schlauch?!

- Alex


----------



## Tomate_Salat (30. Jul 2010)

tuxedo hat gesagt.:


> Okay, das heisst für mich nun im Klartext: GWT Ui basteln, den GWT Compiler drüber laufen lassen, und das was dabei rausfällt über den eigenen, embedded Webserver hosten.


ja



> Okay, für diese Lösung müsste der Webserver eine Art Queryinterface, ansteuerbar mit GET/POST anbieten, und das GWT UI muss einen entsprechenden Request an dieses Interface stellen.


afaik sendet der Browser automatisch die Header beim laden der Seite, die liest du in einem InputStream aus. Da steht alles Mögliche drinn. Vom Browser den du nutzt bis zu der aktuellen URL, POST-Requests, etc. Kannst ja mal testweise einfach einen kleinen server basteln, der nix macht außer die anfrage auszulesen und dann mit dem browser: localhostort ansteuern. Dann siehst du was du an informationen bekommst.

MFG

Tomate_Salat


----------



## tuxedo (30. Jul 2010)

Danke für die Tipps und Hinweise so weit. Ich schau mal ob ich damit weiter komme.

Gruß
Alex


----------

