Multiple webroot folders with Jetty
I'm using Jetty (version 6.1.22) to 开发者_Go百科service a Java web application. I would like to make Jetty look in two different folders for web resources. Take this layout:
+- project1 | +- src | +- main | +- webapp | +- first.jsp | +- project2 +- src +- main +- webapp +- second.jsp
I would like to make Jetty serve both URLs:
http://localhost/web/first.jsp
http://localhost/web/second.jsp
I tried starting Jetty like this:
Server server = new Server();
SocketConnector connector = new SocketConnector();
connector.setPort(80);
server.setConnectors(new Connector[] { connector });
WebAppContext contextWeb1 = new WebAppContext();
contextWeb1.setContextPath("/web");
contextWeb1.setWar("project1/src/main/webapp");
server.addHandler(contextWeb1);
WebAppContext contextWeb2 = new WebAppContext();
contextWeb2.setContextPath("/web");
contextWeb2.setWar("project2/src/main/webapp");
server.addHandler(contextWeb2);
server.start();
But it only serves first.jsp
, and it returns 404 for second.jsp
.
How can I get this to work? I would also like to stay in the same context (i.e. same ClassLoader, same SessionManager etc.).
Since 6.1.12, this is supported by using a ResourceCollection to the WebAppContext's base resource:
Server server = new Server(80);
WebAppContext context = new WebAppContext();
context.setContextPath("/");
ResourceCollection resources = new ResourceCollection(new String[] {
"project1/src/main/webapp",
"project2/src/main/webapp",
});
context.setBaseResource(resources);
server.setHandler(context);
server.start();
More info: http://docs.codehaus.org/display/JETTY/Multiple+WebApp+Source+Directory
I believe you will have to write your own subclass of WebAppContext doing what you want to do.
The easiest way to have your web application deployed with that context instead is to deploy using an XML file in contexts/
精彩评论