好的,我想出了如何让Jetty做我想做的事情,除了处理一些自定义的servlet之外,它又一次承载了一些静态内容。
表面上,做到这一点的方法是创建一个DefaultServlet并相应地设置resourceBase和pathSpec,以允许我在/ www/*上托管一些目录。但是,这从来没有奏效。事实上,我找不到任何有关pathSpecs实际工作或应该如何定义的解释。
因此,我必须创建一个额外的ServletHandler和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的应用程序的静态内容。
来源
2010-12-02 21:29:38
Tom
感谢您的信息,但这不是我想要完成的。我没有WEB-INF目录(因为我没有提供Web应用程序,我猜?)我试图以编程方式设置DefaultServlet并在代码中设置参数,但似乎没有工作。 – Tom 2010-12-01 22:41:09