Webanwendung (jsp) mit dem Tomcat starten

seven

Grünschnabel
Webanwendung (jsp) soll mit dem Tomcat starten

Hallo,

ich habe so ein kleines Problem mit der Miezekatze und da ich nach langem googlen nichts fand, ich mich nun hierher wende.
Aber erstmal die Gegebenheiten: Windows xp SP3, Tomcat 5.5...., java 1.6.0.18 und Eclipse.

Ich habe eine Webanwendung erststellt, die als Dienst auf einem Windowssystem laufen soll. Es wäre schön, wenn diese Anwendung nach dem Start des Computers und des Apache Tomcat auch gleich ihren Dienst verrichten würde. Jetzt ist es erst so, dass ich den Browser mit der URL aufrufen muss, um das Programm zu starten. und das ist auch gleich meine Frage.
Ist es möglich, die Anwendung mit dem Start des Servers zu starten und was muss ich dazu noch machen?

Des Weiteren besteht das Problem, dass wenn ich den Stop-Button drücke, der Dienst nicht beendet wir.
Was kann ich dagegen machen, dass das Programm beendet wird?

Für eure Hilfe danke ich schon mal im Voraus.

gruß
seven
 
Zuletzt bearbeitet:
Hallo,

Servletengines sind wie Webserver Request-Response basiert. D.h. es muss eine Art von Request hereinkommen, damit eine deployte Anwendung angestossen wird. Diese bekommt den Kontext des Requests und kann dann quasi machen was sie will. Meistens soll sie eine Antwort für Browser zurückliefern.

Wenn aufgrund eines Requests (dein intialer Request zum starten des Programmes) ein Servlet in eine Endlosschleife geht, fährt der Tomcat nicht mehr 'gracious' runter. Dafür müssten alle Transaktionen abgeschlossen sein.

Der Servertyp ApplicationServer kann über die Features von Webserver und ServletEngine hinaus auch Anwendungen verschiedener Art hosten, welche im Sinne eines Javaprogrammes gestartet werden und beliebig lange laufen.
Dabei liefert der ApplicationServer eine kontrollierte Umgebung in der meist noch hochwertige technische Features zur Verfügung stehen.

Falls man diese features nicht braucht, wäre eine schnelle Alternative ein ausführbares Jar zu erstellen und ein WindowsService zu generieren, der das Jar ausführt.

Jar -> Windowsservice (http://forge.ow2.org/projects/javaservice/)
 
Hallo,

danke für deine Antwort.

Ich habe auch schon mit JSmooth und Launch4j und diese mit RunAsServise und dem Windows Resource Kit Tools probiert. Der Dienst konnte nicht gestartet werden, weil er im Leerlauf sich befand und somit wurde er von Windows beendet. Da habe bestimmt ich noch irgendwo etwas falsch gemacht und nicht rausbekomen was.

Nun habe ich im Internet gelesen, dass man auch den Tomcat oder Glassfish für solche Zwecke verwenden kann.
Da ich zur Zeit mit dem Tomcat viel probiert habe und viel im Internet gelesen habe, bin ich auf etwas gestoßen.
Das muss in der web.xml mit drin stehen:

Code:
<servlet>
  <servlet-name>SuperServlet</servlet-name>
  <!-- jsp file -->
  <jsp-file>/SuperPage.jsp</jsp-file>
  <load-on-startup>1</load-on-startup>
</servlet>

Mir kommt es auf die Zeile "load-on-startup" an.
Ich habe es angepasst, aber so richtig funktioniert hat es leider auch noch nicht. Ich nehme mal an, dass das nichts mit dem Start des Tomcat zu tun hat, sondern mit dem Start des Servlet-Containers.

Jetzt bin ich immer noch aum Knobbeln, wie ich es am Besten machen kann und freue mich über jeden Tipp.

Gruß seven.
 
Jo, mit load-on-startup wird einmalig die init() Methode des Servlets aufgerufen, wenn der Tomcat startet.
In der init() könnten dann andere Threads gestartet werden z.B. Die Methode sollte bloss auslaufen und nicht selbst in einer Endlosschleife laufen, sonst gibt es Probleme mit nachfolgenden load-on-startup-Servlets und beim runterfahren des Servers.
Was genau geht denn mit der load-on-startup Variante noch nicht?
 
Was nicht funktioniert? So einiges.
Da ich Neuling in der Java EE Programmierung bin, muss ich mich erst mal richtig in Java EE einarbeiten ... mir fehlen grundlegende Kenntnisse. Das Problem ist, die Zeit fehlt.

Das Einbinden der java-datei in die jsp-Datei reicht nicht aus, weil dann die init() und destroy() fehlt. ;)

Das Programm startet erst nach dem Aufruf der URL im Browser. Ist zwar schön, aber so sollte es nicht sein. Jetzt probiere ich eine init() und eine destroy() einzubauen.
 
So, jetzt habe ich eine jspinit() und jspdestroy() eingebaut und die web.xml stimmt auch soweit.
Leider startet das Programm immer noch nicht nach dem Systemstart bzw. Start des Tomcat und ich weiß jetzt auch nicht mehr weiter.

Was muss in der jspinit() und jspdestroy() drin stehen, damit mein Programm aufgerufen wird?

Für jede Hilfe bin ich dankbar.

gruß seven.
 
Hallo,

jspInit wäre ein ähnliches Konstrukt für eine jsp. JSPs sind eher mit html-Seiten vergleichbar, welche Scriptelemente enthalten (dynamische Webseite).
init() wäre das Konstrukt für ein Servlet. Ein Servlet ist eine Javaklasse, die in einem bestimmten Kontext aufgerufen wird (Servlet "Klasse").

Genau weiss ich es nicht, ich vermute allerdings, dass durch load-on-startup für eine jsp nicht das erfolgt was erwartet wird (aufrufen von jspInit).
Für ein Servlet funktioniert dies sicher.

Die Funktionalität, ein Hintergrundprozess zu starten, passt auch eher zu einem Servlet, da ja kein webcontent erzeugt wird.
Ich würde also empfehlen, die jsp zu einem Servlet umzubauen und dies per load-on-startup zu starten.
 

Neue Beiträge

Zurück