# Servlets bei Tomcat-Startup starten



## Axxel (27. Jun 2006)

Hallo,

Ich habe ein Problem, dass so eigentlich gar keines sein sollte, wenn man den diversen Tutorials glaubt, nämlich beim Starten des Tomcats ein bestimmtes Servlet mit zu starten. In dem speziellen Fall geht es darum, einem anderen Server mitzuteilen, dass dieser Server soeben online gegangen ist.

Ich habe eine Webapplikation unter _%TOMCAT%\webapps\meine_app_ liegen und das entsprechendende Servlet in einem jar-Archiv unter _meine_app\WEB_INF\lib_ liegen.
Im darüberliegenden Verzeichnis liegt ja das web.xml-File und dort habe ich das servlet auch eingetragen:


```
<servlet>
   <servlet-name>ServerLogOnServlet</servlet-name>
   <servlet-class>meine_app.web.servlet.ServerLogOnServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>
```

Wenn ich nun aber den Tomcat neu starte, dann passiert da gar nichts. Ich habe im Servlet etwas Ausgabetext, der im Tomcat-Logfile erscheinen sollte, und zudem den Verbindungsaufbau zum externen Server, aber wie gesagt: nichts.

Kann vielleicht jemand helfen, wo das Problem liegt?

Hier ein kurzer Code-Schnipsel aus dem Servlet (ich habe auch schon versucht, das Stück Code in die service()-Methode zu packen, aber ohne Erfolg):


```
public class ServerLogOnServlet extends GenericServlet {
   public void init() {
        System.out.println("servlet got call to LOG ON the server");
        ....
        ....
   }
	
   public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
   }	
}
```

Vielen Dank,
Alexander


----------



## kama (27. Jun 2006)

Hi,

Dir ist bewußt, dass ein Servlet nicht beim start des Tomcat ausgeführt wird, sondern erst bei einem entsprechenden Aufruf?

MfG
Karl Heinz


----------



## Axxel (27. Jun 2006)

Aber darum geht es ja gerade, dass es beim Start des Tomcats mit gestartet werden soll und nicht durch einen expliziten Aufruf und dafür gibts ja im web.xml bei der Deklarartion des Servlets das Tag 
	
	
	
	





```
<load-on-startup>
```
.


----------



## kama (27. Jun 2006)

Hi,

schon mal versucht einen Konstruktor zu erstellen und mal ein print rein zu machen?

EDIT: Es scheint, dass der Tomcat, laut Doku das Serverlet lädt, sprich per Class-Loader geladen wird aber nicht instanziert wird!

MfG
Karl Heinz


----------



## Axxel (27. Jun 2006)

Im Konstruktor funktioniert es auch nicht.
Ich habe jetzt gelesen, dass die Servlet-Spezifikation keine Aussage darüber macht, wann init() ausgeführt wird.
Aber das muss doch so gehen, wie ich es habe, wozu wäre denn sonst diese Möglichkeit gegeben?


----------



## Axxel (27. Jun 2006)

ok, es funktioniert, egal ob mit Konstruktor, init(ServletConfig) oder einfach nur init().
Ich habe es jetzt wieder einfach nur mit init() laufen.

Das Problem war, dass ich im web.xml zwischen den _load-on-startup_-Tags eine -1 stehen hatte, was wie ich dachte dafür steht, dass das Servlet keine Priorität besitzt und "irgendwann" nach dem Tomcat-Start geladen wird. Offensichtlich ist das aber nicht der Fall. Mit einer 1 für höchste Priorität funktioniert es so, wie ich es mir vorgestellt habe.


----------

