2010-11-22 35 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