好的,我想出瞭如何讓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