2010-09-15 37 views
7

我有一个配置和启动Jetty的主类。 (这是从检票标准做法用于测试Web应用程序,但它真的不检票专用。)以编程方式向Jetty添加资源

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 /主/ web应用作为Web应用程序根目录。但是,我有一些资源在目标/类中,并且稍后将其复制到Web应用程序中。所以我想添加虚拟目录到码头。

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

有人能帮忙吗?

BTW:这是码头6.1.4

回答

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

工程就像一个魅力,谢谢。 – 2010-09-16 12:24:21

+0

为什么需要'WebAppContext.setServer(Server)'和'Server.addHandler(WebAppContext)'? – NSPKUWCExi2pr8wVoGNk 2014-05-13 19:51:48

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

相关问题