2014-02-16 5 views
4

У меня есть проект, который запускает встроенный сервер причала. Кроме того, у меня есть angularjs-1.2.12.jar в зависимости от проекта.Как настроить встроенный причал + webjars

Как настроить причал, чтобы выставить файлы из META-INF/resources. я попытался сделать следующее:

ResourceHandler resource_handler = new ResourceHandler(); 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setWelcomeFiles(new String[]{ "index.html" }); 
    resource_handler.setBaseResource(Resource.newClassPathResource("/")); 

    Server server = new Server(8080); 
    server.setHandler(resource_handler); 

Но только файлы из целевых/классов подвергаются.

спасибо.

UPD: решена

ResourceHandler resource_handler = new ResourceHandler() { 
     @Override 
     public Resource getResource(String path) 
       throws MalformedURLException { 
      Resource resource = Resource.newClassPathResource(path); 
      if (resource == null || !resource.exists()) { 
       resource = Resource.newClassPathResource("META-INF/resources" + path); 
      } 
      return resource; 
     } 
    }; 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setWelcomeFiles(new String[]{"index.html"}); 
    resource_handler.setResourceBase("/"); 
    server.setHandler(resource_handler); 
+0

Какую версию Jetty вы используете? –

+0

jetty-all-9.1.1 –

+3

Похоже, что решение может выявить все ресурсы в classpath, которые будут использоваться как статические активы. Если это может быть большой лазейкой безопасности. Вот почему по умолчанию Servlet 3 используется только для префиксных путей META-INF/resources. –

ответ

0

Я знаю, что это старый вопрос, но у меня была такая же проблема, и после изучения всего, ваше решение было лучшим. Но, как отметил Джеймс Уорд в комментариях, это создает проблему безопасности. Вот мое решение, опираясь на твое:

public class MyResourceHandler extends ResourceHandler { 
    @Override 
    public Resource getResource(String path) { 
     Resource resource = Resource.newClassPathResource("META-INF/resources" + path); 
     if(resource == null) resource = super.getResource(path); 
     return resource; 
    } 
} 

Как отметил here, ResourceHandler несколько устарели. На самом деле я реализовал это решение, вместо этого набрав DefaultServlet.

Смежные вопросы