2009-08-06 4 views
1

Ich habe einen Web-App: MyApp.war, im Innern, ich habe eine JAR-Datei: WEB-INF/lib/PublicJar.jarServe eine JAR-Datei aus einer WAR-Datei (als Ressource)

  • Ich mag Client-Anwendungen sein kann dieses Glas wie eine Web-Ressource herunterladen. z http://theserver.com/myapp/jars/PublicJar.jar

  • Ich möchte, dass die Web-Anwendung, die Hash-Code der JAR-Datei zu sehen, ob es in der Lage sein geändert zu berechnen, so dass Kunden wissen, ob es es neu zu laden muss.

Kann dies getan werden?

Antwort

3

Ressourcen innerhalb WEB-INF können nicht direkt an den Client geliefert werden. Wenn Sie dies tun möchten, müssen Sie ein Servlet/Controller schreiben, um es als ServletContext Ressource zu extrahieren und es an die HTTP-Antwort zu füttern.

Wird PublicJar.jar auch von Ihrer Anwendung selbst verwendet? Könnten Sie es nicht aus WEB-INF verschieben, oder vielleicht zwei Kopien davon in der WAR, eins unter WEB-INF (für die interne Anwendung), und einen zum Herunterladen bündeln?

+0

PublicJar.jar wird von der Anwendung verwendet, da Ressourcen geladen werden, wenn sie über feedure loader classpath: public/resource.xml aufgerufen wird. Tatsächlich enthält PublicJar.jar nur Ressourcen - es ist nur ein Glas, um sie alle zusammen als eigenständige Einheit zu halten. – Justin

+0

In diesem Fall, verschieben Sie das Jar aus WEB-INF, Spring kann immer noch mit einer ServletContextResource laden. Sobald sie WEB-INF verlassen, können die Kunden direkt darauf zugreifen. – skaffman

+0

Danke! Der Spring Resource Loader hat total geholfen. Ich ging mit dem Servlet-Ansatz, weil ich bereits HttpInvoker für die Clients verwende, also habe ich eine Service-Methode hinzugefügt: byte [] readPublicJar() - quick + dirty. Wenn PublicJar jemals groß wird, muss ich es in den Servlet-Kontext verschieben, anstatt es vom Servlet einzulesen. – Justin