2016-04-13 4 views
0

Ich habe eine Reihe von Servlets. Ich möchte, dass alle einen Logger instanziieren, ziemlich genau so.
Gibt es eine richtige (wie eine Main-Datei), wo ich solchen Code bograisrap?
Momentan, was ich tue, ist eine Unterklasse der Servlet-Klasse erstellt, die das in der init-Funktion tut und alle anderen Servte von ihr erbt.Gibt es eine Möglichkeit, einige Aktionen zu allen meinen Servlets zu starten?

+0

[Lombok] (https://projectlombok.org/features/index.html) bietet ein '@ Slf4j', das praktisch ist –

Antwort

0

Ich weiß nicht, ob es eine gute Idee ist, was Sie für den Logger versuchen (ich denke, Sie werden einige Logger Kapazitäten verlieren), aber gut, wenn Sie eine einzigartige Instanz von etwas in einem Servlet wollen, sollten Sie es deklarieren und initiiere es auf die statische Weise:

static final SomethingClear GLOBAL; 
static{ 
    // do tons of things to init 
    GLOBAL = ClassWithStaticFunc.gimmeGlobalLoaded(); 
} 

Ein warum ist besser so? weil es einen anderen lustig -oder naja, kann nervig sein :(- Weg, um eine statische laden (im Sinne der Einzigartigkeit und das wird immer eine Instanz im Speicher) Variable in einem Servlet:

Servlets nicht nichts haben wie ' Sie sind eindeutige Instanzen, die in einem Servlet-Container leben, von ihm instanziert werden, und ihre Methoden (doGet, doPost, doPut, doDelete) werden vom Servlet-Container bei Bedarf ausgeführt, wobei sie Request- und Response-Objekte erhalten Es wird immer nur eine einzige Instanz jedes Servlets geben, also wird jede Variable außerhalb von doGet, doPut, doDelete und doPost im Speicher eindeutig sein, und zwar zu Beginn der Java-Zeit, um Speicher zu sparen. ..

Und das ist eine lustige Möglichkeit, Sitzungen zu verschmelzen ... :(

Wenn Sie etwas etwas außerhalb dieses Verfahren in einem Servlet assing wird es an allen Sitzungen der Anwendung zugeordnet werden und ist nicht auf der Hand und ist nicht so leicht zu finden ...

So ist es besser, markieren sie als statisch und endgültig, weil sie immer erstellt werden (Sie haben keinen Zugriff auf die Konstruktion von Objekten) und es wird nur eine Instanz geben. Es ist nicht nett, aber Servlets sind nicht nett ...

Ich tat einmal ein einzigartiges Servlet, das meine Gewohnheit "Servlets" unter Verwendung der Reflexion aufruft (ein Gegenstand pro Klage, den Namen meines "Servlets" in der web.xml gebend) als initParam und setzen den Servlet-Namen immer auf das gleiche Servlet, das der Initiator von Minen war), um Session-Zusammenführungen zu lösen und funktionierte großartig.

Verwandte Themen