Überschreiben einer Klassendatei von einer Bibliotheks-JAR in einer Java-Webanwendung

8

In meiner Java Web App habe ich diese Dateien:

%Vor%

Wird die im Verzeichnis classes definierte Klasse anstelle der in example.jar definierten Klasse verwendet?

Danke.

    
Michael 02.12.2011, 20:36
quelle

2 Antworten

13

Die Antwort hängt von Ihrem Container ab und hängt vom Container ab. Im Allgemeinen wird / WEB-INF / classes den Klassen in einer JAR-Datei in WEB-INF / lib vorgezogen.

Für Tomcat lautet die Reihenfolge wie folgt:

Aus der Perspektive einer Webanwendung wird daher das Laden von Klassen oder Ressourcen in den folgenden Repositorys in dieser Reihenfolge angezeigt:

  1. Bootstrap-Klassen Ihrer JVM
  2. Systemklassenladeklassen
  3. / WEB-INF / Klassen Ihrer Webanwendung
  4. / WEB-INF / lib / * .jar Ihrer Webanwendung
  5. Gemeinsame Klassenladeklassen

Wenn Sie jedoch einen anderen Container verwenden, müssen Sie die Dokumentation für diesen Server lesen.

    
Matthew Farwell 02.12.2011, 20:38
quelle
7

Es gibt also nur einen Weg, das herauszufinden. Ich habe einen Test geschrieben :)

%Vor%

Mein Befund war, dass in TestFoo.java druckt

%Vor%

Und für TestFooInWeb.java druckt

%Vor%

Beide Tests haben dies in der Testklasse:

%Vor%

Also alles am Ende, ich stehe korrigiert. Sie können eine völlig andere Klasse laden und alle Jar-Dateien werden diese neue Klasse verwenden. Das macht Sinn, weil ClassLoader zuerst auf das Klassenverzeichnis schaut. Ich bin nicht sicher, ob ich damit einverstanden bin, weil es verdächtig klingt und ich Sicherheitsklassen überschreiben kann.

    
Amir Raminfar 02.12.2011 21:12
quelle

Tags und Links