Jetty 6:带有目录列表的静态内容

时间:2010-11-22 19:54:56

标签: java servlets jetty embedded-jetty

我在我的Java应用程序中使用Jetty 6作为嵌入式Web服务器。到目前为止,我没有理由提供静态内容,但现在我不仅要提供静态内容,还要显示目录列表。

我尝试使用ResourceHandler类来执行此操作,但在某些时候,mortbay删除了ResourceHandler执行目录列表的功能。

我想在不添加.jsp或servlet功能且没有web.xml配置的情况下执行此操作。总之,我试图以编程方式执行此操作。

对于我的生活,我在网上找不到任何这样的例子。有人能指出我正确的方向吗?

非常感谢!

2 个答案:

答案 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

如果我错了,请纠正我,我会删除这个答案,这只是我的头脑。