2009-09-22 96 views
21

我成功地將Jetty嵌入到測試應用程序中。它可以提供沒有問題的文件。 現在我想知道Jetty是否可以爲自己的Jar文件中的文件提供文件。嵌入式Jetty在Jar文件中查找文件

有誰知道這是可能的嗎?

回答

-2

也許更多的是黑客,但不是JAR文件實際上是ZIP? (不知道)你可以將它們解壓縮到一個臨時文件夾並從那裏提供服務?

+1

我可以,但爲了簡單起見,我想在一個Jar中包含一個自包含的Web應用程序。 :) – LaSombra 2009-09-22 23:05:25

+1

事實上,如果你嘗試設置一個webapp文件夾,jetty會在內部執行此操作,所以他並沒有那麼遙遠。 – fd8s0 2013-08-12 10:56:10

-7

找到答案,它不是碼頭,它是溫斯頓。 http://winstone.sf.net

+0

但OP詢問Jetty ... – MTCoster 2013-06-08 09:48:18

+1

這個答案是由OP ... – Asaf 2013-08-28 12:45:27

+1

降低投票,因爲即使你是OP,這個解決方案真的不是一個解決方案。而這將是一個極其罕見的情況,一個磕磕絆絆的人會遇到這個問題。 – alok 2016-07-23 06:14:16

37

的實例列在碼頭嵌入網頁上,http://docs.codehaus.org/display/JETTY/Embedding+Jetty

關鍵是要創建一個文件URL到類路徑中的位置。

String webDir = this.class.getClassLoader().getResource("com/company/project/mywebdir").toExternalForm(); 

ServletContextHandler context = new ServletContextHandler(); 
context.setContextPath("/"); 
context.setResourceBase(webDir); 
+1

哪個類應該執行此代碼? – phtrivier 2011-12-01 11:04:02

+0

@phtrivier實例化org.mortbay.jetty.Server或org.eclipse.jetty.server.Server的類。 – 2011-12-02 17:24:05

+0

任何想法如果'request.getRequestDispatcher(...)。forward(req,resp)'在從JAR文件運行時在'WEB-INF'下沒有找到'.jsp'文件,該怎麼辦? – 2014-04-09 02:58:55

5

這很簡單,如果你把Spring放在方程中。在這裏:

 
... 

WebAppContext webAppContext = new WebAppContext(); 
webAppContext.setServer(server); 
webAppContext.setContextPath("/"); 
webAppContext.setResourceBase(new ClassPathResource("webapp").getURI().toString()); 

server.addHandler(webAppContext); 

.... 

這將使碼頭找到jar文件內的必要的網絡資源。

+0

謝謝。我用Maven + Assembly插件做了:) – LaSombra 2010-06-09 14:35:07

+1

什麼類型是'服務器'? – 2013-12-19 08:49:35

+1

@WimDeblauwe org.eclipse.jetty.server.Server – fionbio 2015-10-22 06:32:42