在开发中,我使用jetty作为servlet容器。我有以下开发配置:
主要项目webapp可以在开发模式下启动,这要归功于为jetty提供了适当的WebAppContext
。
现在我想类似地启动派生项目,假设在提出请求时,尝试:
我知道可以覆盖WebAppContext#getResource()
方法,但是我们在项目中使用的某些库似乎可以自己在wabapp目录上执行IO操作。例如,通过调用ServletContext#getRealPath("/")
,然后在不使用ServletContext#getResource()
方法的情况下读取文件。问题可以通过File
之上的某个虚拟文件系统在较低级别上解决,但是在JDK 1.6中似乎不支持任何建议?
答案 0 :(得分:1)
似乎使用像ResourceCollection
这样的东西就足够了:
不幸的是,我使用的GWT的DevMode基于jetty 6,其中ResourceCollection不可用。我自己扩展了Resource
课程,并与自己的GWT JettyLauncher
一起扩展,并且感谢通过反射在resourceBase
上设置DefaultServlet
的小技巧,我能够从同时有两个目录。
protected void doStart() throws Exception {
setClassLoader(new LauncherWebAppClassLoader());
super.doStart();
ServletHolder holder = getServletHandler().getServlet("default");
Servlet servlet = holder.getServlet();
Field field = servlet.getClass().getDeclaredField("_resourceBase");
field.setAccessible(true);
field.set(servlet, combinedResourceBase);
}