以编程方式向Jetty添加资源

时间:2010-09-15 13:44:48

标签: java jetty embedded-jetty

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

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

有人可以帮忙吗?

顺便说一句:这是码头6.1.4

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

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

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用作后备。