2015-03-12 20 views
10

ich versuche hinzufügen statische Web-Inhalte in einer Feder-Boot-Server mit der Info hereWie in Spring-Boot-

Ich habe versucht, das Hinzufügen der js und CSS-Dateien Ich brauche in der mehrere statische Web Content hinzufügen Ordner, die der vorherige Link, aber es sagt nicht funktioniert:

/META-INF/resources/ 
/resources/ 

Hinweis: ich die /static/ und /public/ Ordner nicht erstellt habe, weil ich nicht weiß, den absoluten Pfad in meinem Projekt.

Ich habe hinzugefügt, auch die addResourceHandlers Methode:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
if (!registry.hasMappingForPattern("/webjars/**")) { 
    registry.addResourceHandler("/webjars/**").addResourceLocations(
      "classpath:/META-INF/resources/webjars/"); 
} 
if (!registry.hasMappingForPattern("/**")) { 
    registry.addResourceHandler("/**").addResourceLocations(
      RESOURCE_LOCATIONS); 
} 
} 

Und die Referenz in der HTML-Datei wie diese sind:

<script src="bootstrap-switch.js"></script> Jede Idee, wie ich das beheben kann?

AKTUALISIERT:

enter image description here

2 AKTUALISIERT: die @jfcorugedo

Doesnt Arbeit versucht. Schau mal, hast du das gesagt?

enter image description here

3 AKTUALISIERT: versuchen, die @jfcorugedo, zweite Beratung:

enter image description here

+1

Versuchen Sie Zugriff auf die Datei mit /application-context/js/bootstrap-switch.js –

+0

Für Ihre zweite Aktualisierung sollten Sie nicht META-INF in Src einfügen. Es ist genug oder

+0

Es funktioniert Danilo nicht. –

Antwort

13

Ich glaube, Sie statische Inhalte zugreifen sollten mydomain/<context>/<resource type>/resource

Zum Beispiel mit:

http://mydomain/app/js/test.js 
http://mydomain/app/img/test.jpg 

Sie können Ihre Ressourcen mit Anwendungskontext schreiben oder einfach relativen Pfad:

<script src="js/bootstrap-switch.js"></script> 

oder

<script src="/<myapp>/js/bootstrap-switch.js"></script> 

Aber wenn Sie mit einem webjar verwenden Bootstrap Sie Es

<script src="/<myapp>/webjars/bootstrap/<version>/js/bootstrap-switch.js"></script> 

schreiben sollte ist ein Projekt auf GitHub, um dies zu veranschaulichen https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-static

UPDATE 1

Ich habe ein Testprojekt mit der Follow-Struktur:

enter image description here

I Stil zugreifen kann.CSS auf http://localhost:8080/css/style.css

Sie http://start.spring.io/ verwenden, können Sie neue Projekte

Eine weitere Option ist Frühling-Tool erstellen helfen, verwenden Suite oder IntelliJ IDEA. Sie können Ihnen helfen, ein neues Projekt mit den richtigen Konfigurationen zu erstellen (wie der vorherige Link).

+0

ok und muss ich die Dateien in welches Ordner-Projekt kopieren? Ich habe sie in '/ project_name/src/main/resources/META-INF/js' und'/project_name/src/main/resources/META-INF/css' kopiert, aber das funktioniert nicht. –

+0

Ich habe mit einem Screenshot aktualisiert. Könnten Sie bitte bestätigen, dass die beiden Probleme korrekt sind? Sollte ich etwas von meinem 'addResourceHandlers' ändern? Es funktioniert nicht. –

+0

Verwenden Sie js/bootstrap-switch.js und css/bootstrap-switch.css in Ihren Referenzen –

13

Sie müssen die Methode addResourceHandlers nicht hinzufügen, Spring boot führt diese Methode in ihrem eigenen Code aus.

Legen Sie die Dateien nicht in den Webapp-Ordner.

Sie müssen nur Ihre Dateien in einem dieser Verzeichnisse setzen:

/META-INF/resources/ /resources/ /static /public

Zum Beispiel, wenn Sie die Datei js/bootstrap-switch.js, diese Datei in einem dieser Ordner sein muss geladen werden soll:

/META-INF/resources/js/bootstrap-switch.js /resources/js/bootstrap-switch.js ...

ich habe einen Ordner META-INF/resources/js in meinem/src/main/resources erstellt und alles funktioniert:

folder hierarchy in my test project

Ich habe eine test.js-Datei in diesem Ordner abgelegt, und wenn ich die URL haben http://localhost:8080/js/test.js die Anwendung mir die JS-Datei gegeben hat.

Sind Sie sicher, dass Sie dieselbe Ordnerhierarchie erstellen?

+0

Also der absolute Pfad auf dem Server dafür ist:/project/src/main/META-INF /? oder einfach/project/META-INF? –

+0

Ich habe die Frage aktualisiert. –

+2

Sie müssen diese verwenden: src/main/resources/META-INF/ Fügen Sie keine Ressourcen in src/main ein, da maven standardmäßig nur Dateien innerhalb von src/main/java und src/main/erkennt. Ressourcen – jfcorugedo

0

Erstellen Sie einen Ordner überall mit einem/statischen Ordner im Stammverzeichnis. Dies kann überall auf Ihrem Arbeitsplatz sein. Beispiel C: \ mywebapp \ static. Fügen Sie C: \ mywebapp dem Laufzeitklassenpfad hinzu, oder fügen Sie bei Verwendung von Intellij/Eclipse den Ordner C: \ mywebapp als Bibliothek hinzu.

Dies ist anders als das Hinzufügen von statischem HTML als Quellordner, wodurch es bei jedem Build in den Ausgabeklassenordner kopiert wird. Wenn Sie eine große Web-App oder Single-Page-App mit eckigen oder Sencha haben, ist dies ein Schmerz. Fügen Sie stattdessen den Ordner C: \ mywebapp als Bibliotheksordner oder Laufzeitklassenpfadordner hinzu.

Der Vorteil davon ist, es wird Ihren Javascript-Code auf dem gleichen Host/Port wie Ihre Spring Boot Rest, Ajax, etc. Dienste laufen lassen, ohne sich mit Jsonp oder Cors beschäftigen zu müssen.

1

Mit Blick auf org.springframework.boot.autoconfigure.web.ResourceProperties Klasse, können Sie diese Codezeile sehen:

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}; 

Bedeutung /META-INF/resources/, /resources/, static/ und public/ Verzeichnisse zur Verfügung statische Inhalte zu dienen.

So können Sie ein static/ oder public/ Verzeichnis unter resources/ Verzeichnis erstellen und Ihre statischen Inhalte dort. Und sie werden zugänglich sein: http://localhost:8080/your-file.ext.(unter der Annahme, server.port ist 8080)

Sie können diese Verzeichnisse mit spring.resources.static-locations in der application.properties anpassen.

Zum Beispiel durch diese Konfiguration bietet:

spring.resources.static-locations=classpath:/custom/ 

Sie können custom/ Ordner unter resources/ zu dienen statische Dateien verwenden und sie über die URL oben zugreifen.

Verwandte Themen