我在我的Java应用程序中使用Jetty 6作为嵌入式Web服务器。到目前为止,我没有理由提供静态内容,但现在我不仅要提供静态内容,还要显示目录列表。
我尝试使用ResourceHandler类来执行此操作,但在某些时候,mortbay删除了ResourceHandler执行目录列表的功能。
我想在不添加.jsp或servlet功能且没有web.xml配置的情况下执行此操作。总之,我试图以编程方式执行此操作。
对于我的生活,我在网上找不到任何这样的例子。有人能指出我正确的方向吗?
非常感谢!
答案 0 :(得分:3)
好的,我想出了如何让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的应用程序。
答案 1 :(得分:0)
如果你有一个webapp并且只有jetty运行,我认为默认是提供webapp根目录之外的任何静态内容(例如WEB-INF所在的目录)。例如,您可能有以下目录:
mywebapp
- WEB-INF
- static
- site_img.gif
现在您可以投放http://mysite.com/static/site_img.gif
如果我错了,请纠正我,我会删除这个答案,这只是我的头脑。