2016-04-29 1 views
1

У меня есть webapp с очень простым web.xml.Не удается использовать статические файлы в webapp с пружиной

<?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> 

Я установить это свойство contextConfigLocation так, что класс org.glassfish.jersey.server.spring.SpringWebApplicationInitializer не добавляет ContextLoadListener и RequestContextListener, как я хотел бы сделать это вручную.

Тогда у меня есть свой собственный класс WebApplicationInitializer, чтобы добавлять сервлеты программным способом, а не через 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"); 
     } 

    } 
} 

Когда я запускаю мой веб-приложение я не могу получить доступ к статическим файлам я добавил, такие как /css/app/ui-grid.css.

war file structure

Когда я бегу Tomcat я получаю это хотя ...

enter image description here

Так что я путаюсь у меня нет каких-либо записей в моем сервлета конфигурации, которые замещают сервлет по умолчанию, который в Tomcat должен быть/*. Почему сервлет по умолчанию не попадает и не обслуживает мой контент?

+0

в консоли администратора tomcat, можете ли вы увидеть контекст (путь), на который развернуто ваше веб-приложение? возможно, он развернут в корневом контексте ('/') вместо '/ tervita360'? – ochi

+0

Да, это определенно в/tervita360. Также мой тестовый сервлет доступен. – benstpierre

+0

Что касается содержимого вашего файла WAR? они правильны? вы заглянули в файл WAR, чтобы подтвердить, что все необходимые файлы там? - просто осветить основы на данный момент – ochi

ответ

0

У Джерси есть класс, который реализует ServletContainerInitializer, называемый JerseyServletContainerInitializer, который менял мои сопоставления по умолчанию для/* и т. Д. Мне пришлось отключить сканирование классов ServletContainerInitializer в контейнере через web.xml по How to disable Servlet 3.0 scanning and auto loading of components, и мои статические ресурсы снова работают.