[Java] Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von rushzero, 19. Juli 2012 .

  1. 19. Juli 2012
    Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

    Hallo,

    wie im Titel schon erwähnt will ich eine Desktopanwendung, welche als MVC implementiert wurde nun per Webanwendung bereitstellen.

    Nun steh ich gerade total auf dem Schlauch wie ich das umsetzte, das Model besitzt eine ServerSocket, der auf Daten wartet.
    Sind Daten beim Server angekommen, wird per Observer-Pattern die View benachrichtigt.

    Aber wie soll das bei JSP ablaufen? Dort wird ja quasi bei jeden Aufruf eine neue Instanz meines Model erzeugt, denn es greifen ja mehrere Benutzer gleichzeitig darauf zu. Wodurch das Model keine ServerSocket mehr öffnen kann weil der Port schon belegt ist.

    Wenn jemand die Beschreibung nicht versteht versuch ich mal ein Diagramm zu erstellen, irgendwie fehlen mir gerade auch die Worte um es passend zu beschreiben.

    Danke
     
  2. 19. Juli 2012
    Zuletzt bearbeitet: 19. Juli 2012
    AW: Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

    Stichwort Multithreading.

    Hab mich mit JSP noch nicht so stark auseinandergesetzt, aber rein vom logischen her solltest du vom Server nur eine Instanz starten. Das ist dann ein Servlet welches auf deinem Tomcat läuft. Die Verbindung die du dort bei einem ServerSocket.accept erhälst, übergibst einem Thread in dem alles weitere passiert, zb könntest du da das Model erzeugen wenn es ein eigenes für jeden Client geben soll. Der ServerSocket leitet die Verbindugn automatisch an einen unbelegten Port um, lauscht danach wieder auf dem von dir definierten Port und kann weitere Clients annehmen. Oder habe ich was falsch verstanden?

    Hier noch ein Beispiel dazu: Lesson 1: Socket Communications
     
    1 Person gefällt das.
  3. 20. Juli 2012
    AW: Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

    Aha dem Servlet kann man also sagen das nur eine Instanz erzeugt werden soll. =)

    Zum Thema Multithreading ist schon eingebaut hätte ich erwähnen sollen *g*.

    Danke.
     
  4. 20. Juli 2012
    AW: Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

    Ich meinte das so, dass du Verbindungsaufbau und Model trennen kannst, also in der main() Methode vom Servlet hast du irgendwo accept() vom ServerSocket, da kriegst du einen Socket zurück. Den Socket übergibts du einem Thread und in diesem Thread wird das Model nur für diesen Socket erzeugt. Wenn du das schon hast - super dann sollte das laufen.

    Wie das im Detail zwischen .jsp und Servlets funktioniert weiß ich nicht. Hab grad noch was von Facelets gelesen, scheint so als könnte man beides dafür verwenden.

    java - What is the difference between JSF, Servlet and JSP? - Stack Overflow
     
  5. 20. Juli 2012
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

    Hat es einen Grund, dass du alles selbst machen möchtest?

    Andernfalls würde ich auf jeden Fall ein Framework dafür benutzen, da gibt es etliche. Ich habe gute Erfahrungen mit dem (kostenlosem) Spring MVC Framework gemacht: 15. Web MVC framework

    Dieses Framework bietet dir ein Grundgerüst. Du musst dich nicht um Details wie kommunikation zwischen View und Controller kümmern, sondern nur implementieren wie die Seite aussehen soll (View mit JSP) und was bei den jeweiligen GET/POST Requests passieren soll (Controller) und welche Daten aus dem Modell angezeigt werden solllen. Wenn dein bisheriger Code sauber nach dem MVC aufgebaut ist, sollte er auch in das Spring MVC Framework migirierbar sein.

    Die API ist übrigens sehr gut dokumentiert und es gibt viele Tutorials.

    Ich versuche dir dein Problem an folgender Abbildung zu erklären:
    Bild
    {img-src: http://static.springsource.org/spring/docs/3.0.x/reference/images/mvc.png}

    Von deinem Model gibt es nur eine Instanz. Es macht keinen Sinn sie mehrmals zu Instanziieren.
    Du stellst dem Benutzer eine View zur Verfügung. Die kann man z.B. mit JSP implementieren. Die View wird im Browser des Benutzers angezeigt. Bei Interaktionen werden HTTP Requests (POST/GET) an den Server, auf dem die auf z.B. Tomcat deployte MVC-Anwendung läuft, gesendet. Dort "warten" Controller. Man könnte theoretisch einen Controller haben, der alle Requests entgegen nimmt (Singleton). Es gibt auch weitere Möglichkeiten, d.h. ein Controller pro Session uvm., das hängt von der Komplexität deine Anwendung ab.
    Der Controller wertet den Request aus (ganz normaler Java Code) und schreibt/liest Daten in/aus dein/em Model (z.B. Datenbank, Files o.ä.), die dann in der View angezeigt werden.

    Detaillierter steht es in der Dokumentation (siehe Link oben).
     
  6. 25. Juli 2012
    AW: Desktopanwendung mit Tomcat, JSP auf Webanwendung Portiern

    hai, hab auch angefangen mich damit zu beschäftigen.
    Das ganze mit einer Instanz global zu lösen hab ich gelesen ist keine gute Idee, vorallem weil da x-Nutzer auf die selbe Instanz zugreifen.....

    Bessere Ansatz wäre da "EJB"

    Du musst deinen Servlet mit
    @EJB Annotation versehen. Dann noch irgendwie weiter...mit @Stateful oder @Stateless
    So kümmert sich EJB selbst um die benötigten Instanzen. Musst da keine selbst mehr erzeugen.
    Kannst dich vielleicht in die Richtung erkundigen.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.