2010-11-23 4 views
1

Ich stelle mir mein (jetzt lokales) Programm vor, das in Zukunft auf einem Server mit einer Webschnittstelle läuft, mit Tomcat und Servlets. Ich bin nur verwirrt darüber, wie ich meine vorhandene Anwendung mit HTTPRequests integrieren kann, die zu einem Servlet kommen.Wie hängt man eine Servlet-Webschnittstelle an eine lokale Client-Anwendung an?

Sollte meine Anwendung bereits ausgeführt werden, und das Servlet kann die Kontrolle übertragen? Oder wird mein Programm das Servlet selbst werden? Oder enthält meine Anwendung ein Servlet und Tomcat weiß nur, dass es in meiner App ein Servlet gibt?

Ich brauche nur einen Ratschlag darüber, wie alles zusammenpassen könnte und wie ein Servlet die Anwendungslogik aufruft ... Danke!

Ich stelle mir vor, so etwas wie:

  1. Httprequest kommt auf Tomcat, welche Routen sie dem Servlets durch genannt Servlet.service (...) (Servlets erstellt, wenn nicht bereits vorhanden)
  2. Servlet.service() prüft, ob die Anwendung ausgeführt wird, wenn nicht,
  3. Servlet, ein neues Verfahren für die Anwendung erstellt, kann den Httprequest-Kopf/Körper zu dem neuen Verfahren, entweder durch Befehlszeile oder über stdin
  4. senden
  5. Servlet kann entweder warten, bis der neue Prozess beendet ist, oder eben t senden Sie eine HTTPResponse zurück und lassen Sie den Prozess laufen (die Anwendung muss eingefädelt werden, also senden Sie die Antwort sofort und lassen Sie sie laufen).
  6. Wenn eine weitere Anforderung an das Servlet kommt, Schritt 2.

Heißt das vernünftig klingen?

Ich nehme an, anstatt einen separaten Prozess zu machen, könnte ich nur meine Anwendung innerhalb des Servlets fädeln und es so auch laufen lassen.

Antwort

1

Nicht genau zu wissen, was Ihre Anwendung ist, ist mein Vorschlag, so viel von der Logik zu isolieren, wie Sie in Ihrer aktuellen Anwendung können. Dies wäre hier Ihre "Geschäftslogik". Behalte das als separates Projekt, das in ein Glas verpackt wird.

Erstellen Sie ein neues Projekt, das als Ihre Webebene dient (am besten als WAR verpackt). Dies würde Ihre Servlets und JSP-Seiten für die Interaktion mit Ihrer Geschäftslogik einschließen. So haben Sie zum Beispiel ein Formular zum Erstellen einer Art von Geschäftsobjekt. Das Formular wäre eine JSP-Seite, die von einem Servlet "bedient" wird. Wenn Sie das Formular absenden, behandelt das Servlet den Formularübermittlungs- und -aufrufcode in Ihrem Geschäftsprojekt (jar).

Das Web-Zeug dient nur als separate Schicht und alle Geschäftslogik getrennt von der visuellen Web-Seite zu halten, würde auch ermöglichen, eine Service-Schicht darüber zu bauen, die auch zwischen Ihrem Web-Projekt und dem tatsächlichen sitzen könnte Business-Logik, obwohl abhängig von Ihrem Zweck, könnte ein wenig übertrieben werden.

+0

Danke. Das haben wir getan; getrennte Projekte für die Web-App und die Anwendung (in unserem Fall sind es sehr unterschiedliche Dinge). Wir haben eine Service-Schicht erstellt, die JMS für die Kommunikation zwischen den beiden verwendet. –

0

In Anbetracht Ihrer Anwendung ist ein lineares, nicht threaded Programm, das etwas beim Instanziieren von Objekten Ihrer Klassen und die Objekte haben einige externe Schnittstelle (öffentliche Methoden). Dann startet der Servlet-Container und Sie müssen eine neue Servlet-Klasse schreiben, die Instanzen Ihrer Objekte erzeugt und Ihre Methoden von den Standard-Servlet-Methoden (service(), doGet(), usw.) aufruft. Denken Sie daran, Ihre Klassen in den Klassenpfad für den Servlet-Container oder die Webanwendung zu stellen.

1

Ein Servlet ist Javas Methode, ein Common Gateway Interface-Programm für einen Webserver zu implementieren.Also dieses Programm, das Sie schreiben (Sie können mehr Informationen zur Verfügung stellen) sollte die Art von Programm, wo Sie einige Eingaben bereitstellen, die Eingabe verarbeiten und dann eine Antwort bereitstellen.

Ich würde vorschlagen, dass Sie die Anwendung, die Sie gerade schreiben, in Controller- und Modellklassen aufteilen. Alles, was mit Input und Output zu tun hat, ist Ihr Controller. Alles, was mit der Geschäftslogik zu tun hat, ist das Modell. (Alles, was etwas ausdruckt, ist die Ansicht. Und yep, ich spreche über MVC, Model-View-Controller-Muster.)

So könnte Ihr Controller in Ihrer Anwendung (bevor Sie alles auf ein Servlet verschieben) nehmen eine Reihe von Argumenten aus der Befehlszeile, überprüfen Sie sie auf Richtigkeit, die richtigen Arten von Kombinationen usw.

Ihr Modellcode sollte eine schöne, einfache Schnittstelle, die nicht auf den Controller angewiesen ist. (Es sollte nicht wissen, ob es von Ihrer Anwendung oder von einem Servlet-Layer aufgerufen wird.) Es sollte eine Methode bereitstellen, die die Geschäftslogik ausführt, indem Parameter verwendet werden, die für Ihre Geschäftslogik sinnvoll sind. Wenn Sie also ein Servlet schreiben, das die Summe zweier Zahlen berechnet, sollte der Modell-Layer eine Methode haben, die zwei numerische Parameter akzeptiert und die Summe zurückgibt. Auf diese Weise können Sie das Modell entweder in die Anwendung oder das Servlet einfügen, und es funktioniert problemlos. Nur Ihr Controller muss geändert werden.

Ich werde nicht gehen, wie man ein Servlet gegen eine Anwendung schreibt - das ist ein kompliziertes Thema und es gibt Tonnen von Beispielen da draußen. Die Art, wie ein Servlet die Anwendungslogik aufruft, ist jedoch einfach: Sie instanziieren Ihre Modellklasse und rufen dann eine Methode für diese Instanz auf. Genau wie jede andere Java-Anwendung.

Verwandte Themen