Ich benutze jsf und spring zusammen in der Webanwendung. Ich habe die Datenquelle und die Sitzungsfactory in einer Konfigurationsklasse konfiguriert, die Anmerkungen wie @Configuration, @ComponentScan
usw. verwendet. Ich habe keine applicationContext.xml-Datei in meinem Projekt, da ich jeden Eintrag von Kontext-XML in der Konfigurationsklasse verarbeite. Der Testfall funktioniert erfolgreich, aber wenn ich meine Webanwendung bereitstelle, wird ein Fehler angezeigt
java.lang.IllegalStateException: Kein WebApplicationContext gefunden: Kein ContextLoaderListener registriert?
Wenn ich nun eine Listener-Klasse in web.xml gebe,
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
es gibt mir Fehler,
/WEB-INF/applicationContext.xml nicht gefunden
Gemäß dem Dokument von ContextLoaderListener
ist es wahr, dass, wenn ich contextConfigLocation
param nicht web.xml
explizit eingebe , nach der Standard-Spring-Kontextdatei mit dem Namen applicationContext.xml
in gesucht wird web.xml
. Was soll ich nun tun, wenn ich die Spring-Kontextdatei nicht verwenden und die gesamte Konfiguration mit Anmerkungen durchführen möchte? Wie sollte ich die Listener-Klasse registrieren ContextLoaderListener
, damit ich meine Webanwendung ohne Verwendung einer XML-Datei und nur mit Anmerkungen mit spring und jsf ausführen kann?
quelle
web.xml
Formulars der offiziellen Spring-Dokumentation aktualisiert .<load-on-startup>1</load-on-startup>
im Dispatcher-Servlet haben. Ohne diesen Dispatcher müssen nicht geladen werden<!-- Configure DispatcherServlet to use AnnotationConfigWebApplicationContext instead of the default XmlWebApplicationContext -->
in Ihrer Antwort, da er mir geholfen hat, den Punkt zuHier wird eine alte Frage aufgeworfen, aber mit den neuesten Versionen von Spring (v3.0 +) können Sie web.xml jetzt vollständig entfernen, vorausgesetzt, Sie stellen Ihre App in einem Webcontainer bereit, der Servlet 3.0+ unterstützt.
Man kann die Spring-
WebApplicationInitializer
Schnittstelle implementieren , um die gleichen Konfigurationen wie in web.xml durchzuführen. Diese Implementierungsklasse wird automatisch von der Spring 3.0+ -App erkannt, die auf Servlet 3.0+ -Containern ausgeführt wird.Wenn die Einrichtung ziemlich einfach ist, können Sie stattdessen eine andere von Spring bereitgestellte Klasse verwenden, wie unten gezeigt. Hier müssen Sie lediglich die @ Configuration-Klassen festlegen und die Servlet-Zuordnungen auflisten. Hält die Einrichtung extrem einfach.
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override protected Class<?>[] getRootConfigClasses() { return null; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[] {AppConfig.class}; } @Override protected String[] getServletMappings() { return new String[] { "*.html" ,"*.json" ,"*.do"}; } }
quelle