# Laden von globalen Resourcen im Servlet Container..?



## sirbender (7. Dez 2009)

Hi,

ich habe gewisse Resourcen die jede Instanz von ServletX braucht. Diese zu laden dauert lange - ich will es also nicht bei jedem Servlet Aufruf tun muessen. Sind Servlets in einem Container komplett abgeschottet oder teilen sie sich static deklarierte Variablen?

Soll ich die Resourcen also ein einziges Mal als static final im Servlet initialisieren und alle weiteren Servlets koennen dann darauf zugreifen?

Kann ich es irgendwie schaffen, dass diese statischen Variablen/Resourcen bereits beim Deployen des WAR initialisiert werden? Was geschieht beim Deployen? Werden alle Klassen geladen? Ich denke mal beim Classloading werden keine statischen Variablen initialisiert oder?

Die statischen Variablen werden also erst initialisiert waehrend das Servlet zum erstenmal aufgerufen wird?

Danke,
sb


----------



## HLX (7. Dez 2009)

Hier zwei Hilfestellungen zu deinen Fragen:

Frage 1:
Java 2 Platform EE v1.3: Interface ServletContext

Frage 3:
Java 2 Platform EE v1.3: Class GenericServlet - init-Methode


----------



## sirbender (7. Dez 2009)

Danke. Das hilft mir schon sehr glaube ich. Du meinst also ich sollte lieber setAttribute benutzen anstatt statische Variablen zu definieren fuer ein bestimmtes Servlet?

Mir ist noch nicht ganz klar wann init(...) ausgefuehrt wird? Gleich nach dem Deployen oder erst wenn das Servlet zum ersten mal benutzt wird?

Danke,
sb


----------



## HLX (7. Dez 2009)

Der ServletContext gilt nur für eine einzelne Anwendung auf dem Tomcat, statische variablen gelten für die ganze VM, also anwendungsübergreifend. Würdest du dein Servlet gleichzeitig in einer zweiten Anwendung auf dem gleichen Tomcat verwenden, könnte eine statische Variable von beiden Anwendungen modifiziert werden. Die setAttribute-Methode ermöglichst das Halten von anwendungsweiten Variablen.

init() wird bei der Initialisierung des Servlet aufgerufen. Normalerweise geschieht diese beim ersten Zugriff auf das Servlet. Über das Tag <load-on-startup> in der web.xml kannst du angeben, dass das Servlet beim Start der Anwendung (sprich beim Deployment oder beim Serverstart) initialisiert werden soll.


----------

