4 Stimmen

statische Dateien aus dem Servlet-Verzeichnis lesen

Ich möchte meine Java-Servlet, um Anrufe für statische Dateien zu ignorieren, zum Beispiel, wenn die Datei vorhanden ist - nur die tatsächliche Datei zurück, ohne tatsächlich das Servlet zu laden.

In meinem Beispiel habe ich ein MyServlet in Netbeans, und unter dem Verzeichnis "web pages" habe ich image.jpg platziert.

Als nächstes habe ich eine .war-Datei erstellt und sie unter tomcat/webapps abgelegt

Wenn ich versuche, eine Anfrage an localhost:8080/MyServlet/image.jpg zu stellen, wird die Datei nicht geladen, sondern das Servlet wird ausgeführt.

was ich will, ist, dass wenn die Datei vorhanden ist - es wird es zurückgeben, sonst wird das Servlet ausgeführt.

Gibt es eine schnelle Möglichkeit, dies umzusetzen?

3voto

home Punkte 12378

Abbildung Ihres Servlets auf / ou /* ist nicht die Standardmethode für die Implementierung von Servlets. Im Allgemeinen ordnen Sie globale (Controller-)Servlets einem Pfad zu wie /myServlet/* . Das Standard-Servlet von Tomcat ist bereits verfügbar, um Ihre statischen Inhalte bereitzustellen. Es ist konfiguriert in <tomcat>/conf/web.xml . Auszug aus der Inline-Dokumentation:

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->

Wenn Sie den oben genannten Ansatz verfolgen, können die URLs in Ihrer Anwendung wie folgt aussehen:

Statische Ressource: http://myserver/myWAR/images/image.gif

Die URLs Ihres Servlets: http://myserver/myWAR/myServlet/* (* := Platzhalter)

Natürlich sind auch komplexere Optionen wie das Auslagern statischer Inhalte auf einen externen Webserver möglich. Sie können die Standardkonfiguration auch außer Kraft setzen, aber in den meisten Situationen ist dies nicht notwendig (zumindest nach meiner Erfahrung).

1voto

Dave Newton Punkte 156303

Normalerweise würden Sie dies über Ihr Servlet-Mapping handhaben oder indem Sie Ihre statischen Ressourcen von Ihrem Servlet-Mapping weglegen.

Andernfalls, wenn die Anfrage Ihrem Servlet zugeordnet ist, müssen Sie entweder (a) nach der Datei im Servlet suchen und auf den echten Dateinamen umleiten oder das Bild selbst zurückstreamen, oder (b) einen Filter schreiben, der genug über die Struktur Ihrer Webapp weiß, um zu erkennen, ob die Anfrage von Ihrem Servlet oder dem Container bearbeitet werden soll.

Wenn Sie Ihren Anwendungsfall beschreiben würden, wäre es einfacher, Ihnen weiterzuhelfen.

0voto

Für statische Dateien müssen Sie höchstwahrscheinlich nur http://localhost:8080/image.jpg (d.h. ohne den MyServlet-Teil in der URL)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X