7

我有一个配置和启动 Jetty 的主类。(这是 Wicket 测试 web 应用程序的标准做法,但它实际上并不是特定于 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 用作 webapp 根。但是,我有一些位于目标/类中的资源,稍后会复制到 webapp。所以我想将虚拟目录添加到码头。

我想映射target/classes/js/jstarget/classes/css/css

有人可以帮忙吗?

顺便说一句:这是码头 6.1.4

4

2 回答 2

8

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();
于 2010-09-15T19:44:41.283 回答
4

为了完整起见,这是我一直在使用的解决方法:

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();

但它不是很优雅,它将所有内容都安装在目标/类中,并且仅使用 webapp 作为后备。

于 2010-09-16T10:45:49.723 回答