Добавить ресурсы в Jetty программно - PullRequest
7 голосов
/ 15 сентября 2010

У меня есть основной класс, который настраивает и запускает Jetty.(Это стандартная практика от Wicket для тестирования веб-приложения, но на самом деле это не зависит от Wicket.)

final Server server = new Server();
//skipped socketconnector initialization

final WebAppContext bb = new WebAppContext();
bb.setServer(server);
bb.setContextPath("/");
bb.setWar("src/main/webapp");
server.addHandler(bb);
server.start();

Как вы можете видеть, src / main / webapp используется в качестве root для webapp.Тем не менее, у меня есть некоторые ресурсы, которые находятся в target / классах и которые будут скопированы в веб-приложение позже.Поэтому я хотел бы добавить виртуальные каталоги в jetty.

Я хотел бы сопоставить target/classes/js с /js и target/classes/css с /css

Кто-нибудь может помочь?

Кстати: это причал 6.1.4

Ответы [ 2 ]

8 голосов
/ 15 сентября 2010

Добавить WebAppContext для каждого виртуального каталога:

final Server server = new Server();
//skipped socketconnector initialization

final WebAppContext js = new WebAppContext();
js.setServer(server);
js.setContextPath("/js");
js.setWar("target/classes/js"); // or whatever the correct path is in your case
server.addHandler(js);

// css the same way

final WebAppContext bb = new WebAppContext();
bb.setServer(server);
bb.setContextPath("/");
bb.setWar("src/main/webapp");
server.addHandler(bb);

server.start();
3 голосов
/ 16 сентября 2010

Для полноты вот обходной путь, который я использовал:

final Server server = new Server();
//skipped socketconnector initialization

final WebAppContext bb = new WebAppContext();
bb.setServer(server);
bb.setContextPath("/");
bb.setWar("src/main/webapp");
final URL url = new File("target/classes").getAbsoluteFile().toURI().toURL();
final Resource resource = new FileResource(url);
final ResourceHandler handler = new ResourceHandler();
handler.setBaseResource(resource);
server.addHandler(handler);
server.addHandler(bb);
server.start();

Но это не очень элегантно, оно монтирует все в target / классах и использует веб-приложение только как запасной вариант.

...