2009-09-22 14 views
21

Ich habe Jetty erfolgreich in eine Testanwendung eingebettet. Es kann Dateien ohne Probleme liefern. Jetzt möchte ich wissen, ob es für Jetty möglich ist, Dateien zu liefern, die sich in seiner eigenen Jar-Datei befinden.Embedded Jetty sucht nach Dateien in seiner Jar-Datei

Weiß jemand, ob das möglich ist?

Antwort

-2

Vielleicht mehr von einem Hack, aber sind nicht JAR-Dateien tatsächlich ZIPs? (nicht sicher) Können Sie sie in einen temporären Ordner entpacken und von dort aus bedienen?

+1

Ich könnte, aber ich möchte eine in sich geschlossene Web-Anwendung in einem Glas zur Vereinfachung. :) – LaSombra

+1

Eigentlich macht Jetty das intern, wenn man versucht, einen Webapp-Ordner zu setzen, damit er nicht so weit weg ist. – fd8s0

-7

Die Antwort gefunden und es ist nicht Jetty, es ist Winstone. http://winstone.sf.net

+0

Aber das OP fragte nach Jetty ... – MTCoster

+1

Diese Antwort ist durch die OP ... – Asaf

+1

Down-Voting, denn obwohl Sie das OP sind, ist diese Lösung wirklich keine Lösung. Und es wäre eine extrem seltene Situation, in der ein Typ, der über das Thema stolperte, mit dieser Lösung einverstanden wäre. – alok

37

Ein Beispiel ist auf der Jetty Einbetten Seite aufgelistet bei http://docs.codehaus.org/display/JETTY/Embedding+Jetty

Der Trick ist es, eine Datei-URL zu Ihrem Classpath Ort zu erstellen.

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

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

Welche Klasse soll diesen Code ausführen? – phtrivier

+0

@phtrivier Die Klasse, in der Sie org.mortbay.jetty.Server oder org.eclipse.jetty.server.Server instanziieren. –

+0

eine Idee, was zu tun ist, wenn 'request.getRequestDispatcher (...). Forward (req, resp)' nicht '.jsp' Dateien unter' WEB-INF' findet, wenn es von einer JAR-Datei ausgeführt wird? –

5

Es ist ziemlich einfach, wenn Sie Frühling in die Gleichung werfen. Und hier geht es:

 
... 

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

server.addHandler(webAppContext); 

.... 

Das wird Steg die notwendigen Web-Ressourcen in der JAR-Datei finden.

+0

Danke. Ich habe es mit Maven + Assembly Plugin gemacht :) – LaSombra

+1

Welcher Typ ist 'Server'? –

+1

@WimDeblauwe org.eclipse.jetty.server.Server – fionbio