好的,我想出了如何让 Jetty 做我想做的事,这又是在处理一些自定义 servlet 之外托管一些静态内容。
从表面上看,这样做的方法是创建一个 DefaultServlet 并相应地设置 resourceBase 和 pathSpec,以允许我在 /www/* 上托管一些目录。然而,这从未奏效。事实上,我找不到任何关于 pathSpecs 实际工作或应该如何定义的解释。
因此,我必须创建一个额外的 ServletHandler 和 Context 并将我的原始 Context 和用于静态内容托管的新 Context 添加到服务器。
我是这样做的:
Server srv = new Server( port );
// create context and handler for my servlets
Context ctx = new Context();
ServletHandler sh = new ServletHandler();
// ... adding servlets here ...
// create context and handler for static content
ServletHandler sh2 = new ServletHandler();
ServletHolder holder = new ServletHolder( new DefaultServlet() );
holder.setInitParameter("resourceBase", staticResourceBase);
sh2.addServletWithMapping( holder, "/*" );
staticContext.setContextPath(staticPathSpec);
staticContext.setServletHandler(sh2);
// add both contexts to server
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { staticContext, ctx });
srv.setHandler(contexts);
这可能不是执行此操作的首选方式,但它确实允许我以编程方式将静态内容托管添加到我的基于 Jetty 的应用程序中。