1

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

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

我想在不添加 .jsp 或 servlet 功能和 web.xml 配置的情况下执行此操作。简而言之,我正在尝试以编程方式执行此操作。

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

非常感谢!

4

2 回答 2

3

好的,我想出了如何让 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 的应用程序中。

于 2010-12-02T21:29:38.150 回答
0

如果您有一个 webapp 并且只是在运行 jetty,我认为默认设置是从 webapp 根目录(例如 WEB-INF 所在的同一目录)中提供任何静态内容。因此,例如,您可能有以下目录:

mywebapp
 - WEB-INF
 - static
     - site_img.gif

你现在可以服务http://mysite.com/static/site_img.gif

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

于 2010-11-23T09:28:19.563 回答