2016-04-29 10 views
1

geliefert werden Ich habe eine Webapp mit einer sehr einfachen web.xml.Statische Dateien können nicht in webapp mit Feder

<?xml version="1.0"?> 

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/applicationContext.xml 
     </param-value> 
    </context-param> 
</web-app> 

Ich habe diese contextConfigLocation Eigenschaft so, dass die Klasse org.glassfish.jersey.server.spring.SpringWebApplicationInitializer nicht automatisch ContextLoadListener und RequestContextListener hinzufügen, wie ich wünschte, dies manuell zu tun.

Dann habe ich meine eigene WebApplicationInitializer-Klasse zum Hinzufügen von Servlets programmgesteuert anstelle von web.xml.

public class MyWebAppInitializer implements WebApplicationInitializer { 

    private static final Logger LOGGER = Logger.getLogger(SpringWebApplicationInitializer.class.getName()); 

    @Override 
    public void onStartup(ServletContext sc) throws ServletException { 
     //Setup spring listeners 
     { 
      LOGGER.config(LocalizationMessages.REGISTERING_CTX_LOADER_LISTENER()); 
      sc.addListener(ContextLoaderListener.class); 
      sc.addListener(RequestContextListener.class); 
     } 
     //Jersey Rest Servlet 
     { 
      final ServletRegistration.Dynamic registration = sc.addServlet(ServletContainer.class.getName(), ServletContainer.class); 
      registration.setInitParameter("javax.ws.rs.Application", com.tervita.portal.RestApplication.class.getName()); 
      registration.addMapping("/rest/*"); 
     } 
     //Normal Servlets 
     { 
      final ServletRegistration.Dynamic registration = sc.addServlet(LoginAction.class.getName(), LoginAction.class); 
      registration.addMapping("/LoginAction"); 
     } 
     //Apache Default Servlet 
     { 
      ServletRegistration.Dynamic dispatcher = sc.addServlet("dispatcher", DispatcherServlet.class); 
      dispatcher.setLoadOnStartup(1); 
      dispatcher.addMapping("/test"); 
     } 

    } 
} 

Wenn ich meine Webapp laufen kann ich nicht auf statische Dateien zuzugreifen ich wie /css/app/ui-grid.css hinzugefügt haben.

war file structure

Wenn ich Tomcat laufen bekomme ich dies aber ...

enter image description here

So verwirrt Ich bin Ich habe keine Einträge in meinem Servlet-Config, die die Standard-Servlet überschreiben, die in Tomcat sollte/* sein. Warum sollte das Standard-Servlet nicht getroffen werden und meinen Inhalt bereitstellen?

+0

in der Tomcat-Admin-Konsole, können Sie den Kontext (Pfad) Ihrer Web-App zu entfaltet? vielleicht wird es im root-Kontext ('/') anstelle von '/ tervita360' bereitgestellt? – ochi

+0

Ja, es ist definitiv bei/tervita360. Auch mein Test-Servlet ist erreichbar. – benstpierre

+0

Was ist mit dem Inhalt Ihrer WAR-Datei? sind sie korrekt? Haben Sie in die WAR-Datei geschaut, um zu bestätigen, dass alle notwendigen Dateien darin enthalten sind? - nur die Grundlagen für jetzt abdecken – ochi

Antwort

0

Jersey hat eine Klasse, die ServletContainerInitializer namens JerseyServletContainerInitializer implementiert, die meine Standardzuordnungen für/* und so geändert hat. Ich musste das Scannen nach ServletContainerInitializer-Klassen im Container über web.xml gemäß How to disable Servlet 3.0 scanning and auto loading of components deaktivieren und meine statischen Ressourcen funktionieren wieder.