2010-11-22 51 views
1

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

我试过使用ResourceHandler类来做到这一点,但在某些时候,mortbay删除了ResourceHandler做目录列表的能力。

我想这样做,而无需添加.jsp或servlet功能,也不需要web.xml配置。总之,我试图以编程方式来做到这一点。

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

非常感谢!

回答

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的应用程序的静态内容。

0

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

mywebapp 
- WEB-INF 
- static 
    - site_img.gif 

你现在可以成为http://mysite.com/static/site_img.gif

纠正我,如果我错了,我会删除这个答案,这仅仅是关闭的。上面有我头。

+0

感谢您的信息,但这不是我想要完成的。我没有WEB-INF目录(因为我没有提供Web应用程序,我猜?)我试图以编程方式设置DefaultServlet并在代码中设置参数,但似乎没有工作。 – Tom 2010-12-01 22:41:09