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?
Antwort
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.
- 1. Gibt es eine Möglichkeit, sprachunabhängige Controller/Ansichten/Aktionen zu haben?
- 2. Gibt es eine Möglichkeit, alle Aktionen einer UIToolbar zu behandeln?
- 3. Gibt es eine Möglichkeit, Postgres auf Heroku neu zu starten?
- 4. Gibt es eine Möglichkeit, einige Sitzungsdaten aus ALLEN Sitzungen zu löschen?
- 5. Gibt es eine Möglichkeit, Fortschrittsbalken in Oberflächendarstellungen automatisch zu starten?
- 6. Gibt es eine Möglichkeit RPM Installation parallel zu starten?
- 7. Gibt es eine Möglichkeit, eine Github-PR-Zusammenführung zu erhalten, um eine EC2-Instanz zu starten?
- 8. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 9. Gibt es eine Möglichkeit, ein Repository als "Vorlage" zu verwenden, um ein neues Repository zu starten?
- 10. Gibt es eine allgemeine Möglichkeit, eine asynchrone Methode zu synchronisieren?
- 11. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 12. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 13. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 14. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 15. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
- 16. Gibt es eine Möglichkeit, PreparedStatement zu aktualisieren?
- 17. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 18. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 19. Gibt es eine Möglichkeit, Unterabfragen zu vermeiden?
- 20. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 21. Gibt es eine Möglichkeit, dies zu loopen?
- 22. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 23. Gibt es eine Möglichkeit, Typdeklarationen zu erweitern?
- 24. Gibt es eine Möglichkeit, "träge" zu lesen?
- 25. Gibt es eine Möglichkeit, Duplikate zu vermeiden?
- 26. Gibt es eine Möglichkeit, Creeps zu löschen?
- 27. Gibt es eine Möglichkeit, Selektoren zu gruppieren?
- 28. Gibt es eine Möglichkeit, einige Aktionen innerhalb einer verzierten Funktion einzufügen
- 29. Gibt es eine Möglichkeit, benutzerdefinierte Steuerelemente mithilfe eines Servlets in JSPs zu injizieren?
- 30. Gibt es eine Möglichkeit, eine MVC-Controller-Aktion zu überschreiben?
[Lombok] (https://projectlombok.org/features/index.html) bietet ein '@ Slf4j', das praktisch ist –