Wie lade ich externe Webseiten und Templates in meine Spring Web Applikation?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Das Argument für den Resource Handler bestimmt das Pattern für die relative URL. Wenn du dort beispielsweise den Wert /example/** angibst, bedeutet das, dass bei allen URLs, die mit http(s)://your-website-domain/example/ beginnen, die Webanwendung in den angegebenen Ressourcenordnern nachschaut.

Noch einmal an einem Beispiel dargestellt:

In addResourceHandlers ist Folgendes gesetzt:

registry
  .addResourceHandler("/example/**")
  .addResourceLocations("/some-files/");

In deiner JSP-Datei hast du beispielsweise ein Bild eingebunden:

<img alt="..." src="<c:url value="/example/some-image.png" />">

Die Webanwendung würde nun unter webapp/some-files nach der Bilddatei some-image.png schauen. Der Resource Handler mappt die Adresse anhand des Pattern auf die verfügbare Resource Location.

Wenn du einen Ordner außerhalb des Webrootverzeichnis nutzen möchtest, brauchst du ein file URI Scheme. Die Angabe ist bei dir noch invalid.

Da dein Webserver offensichtlich auf einem Windows OS läuft, würde das so aussehen:

file:///C:/some/path/to/some/directory/

Mar3ike 
Fragesteller
 17.03.2023, 07:49
Perfekt, vielen Dank! Manch einer hat ein "spring.resources.static-locations" in der application.properties definiert bzw. ein "spring.web.resources.static-locations" weil das erste veraltet ist. Ist es das Gleiche oder vergleiche ich da Äpfel mit Birnen?
0
regex9  18.03.2023, 18:26
@Mar3ike

Mit diesem Property würdest du das Standardverzeichnis (bzw. die Standardverzeichnisse) für Ressourcen bestimmen.

Beim Resource Handler hast du etwas mehr Flexibilität, da du mehrere Ressourcenrouten anlegen (ein URL Pattern wird auf ein/mehrere Verzeichnis/se gemappt) und denen noch individuell explizite Eigenschaften zuordnen kannst.

Bei JavaScript-Dateien kann es beispielsweise Sinn machen, diese explizit zu komprimieren (Gzip-Kompression) und zu cachen.

registry
  .addResourceHandler("/js/**")
  .addResourceLocations("/resrc/js/")
  .setCachePeriod(7200) // 7200 seconds
  .resourceChain(true)
  .addResolver(new GzipResourceResolver()) // gzip compression
  .addResolver(new PathResourceResolver()); // default resolver to find the resources in resource locations

Man könnte den Dateien noch weitere Resolver anhängen, um beispielsweise ein Minifying des Codes anzustoßen oder bestimmte Dateien nur dann auszuspielen, wenn die Anfrage von jemanden bestimmtes kommt.

1