2015-02-10 3 views
17

I static Ordner mit folgenden Struktur habe:Frühling Boot ist kein Ordner Anfragen an `index.html` Dateien

index.html
docs/index.html

Der Spring Boot bildet die Anforderungen / korrekt auf index.html ab. Aber es wird keine /docs/ Anfrage an /docs/index.html (/docs/index.html Anfrage funktioniert korrekt) zugeordnet.

Wie Ordnen Sie Ordner/Unterordner Anforderungen zu entsprechenden index.html Dateien?

+0

Ist die View-Controller-Mapping ich Ihre Frage beantworten vorgeschlagen? Wenn ja, bitte akzeptiere es. Sonst bitte klären Sie Ihr Problem und ich werde gerne meine Antwort aktualisieren. – hzpz

Antwort

2

Es ist nicht Spring Boot Mapping zu index.html es ist die Servlet-Engine (es ist eine Willkommensseite). Es gibt nur eine Willkommensseite (gemäß der Spezifikation), und das Durchsuchen von Verzeichnissen ist kein Merkmal der Container.

+5

das erklärt das Problem, aber schlägt keine Lösung vor, so kann ich diese Antwort nicht akzeptieren –

+1

Ich glaube nicht, dass es eine andere Lösung gibt, als Sie Ihren eigenen Verzeichnis-Browser Servlet-Handler schreiben. Ich kann vorschlagen, dass wenn Sie mögen? –

18

Sie können manuell ein View-Controller-Mapping hinzufügen, um diese Arbeit zu machen:

@Configuration 
public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/docs").setViewName("redirect:/docs/"); 
     registry.addViewController("/docs/").setViewName("forward:/docs/index.html"); 
    super.addViewControllers(registry); 
    } 
} 

Das erste Mapping verursacht Spring MVC eine Umleitung an den Client zu senden, wenn /docs (ohne Slash am Ende) angefordert wird. Dies ist notwendig, wenn Sie relative Links in /docs/index.html haben. Das zweite Mapping leitet alle Anfragen intern an /docs/ (ohne eine Weiterleitung an den Client zu senden) an das index.html im Unterverzeichnis docs weiter.

+0

Funktioniert auch mit verschachtelten Unterordnern: 'registry.addViewController ("/v2/docs "). SetViewName (" Weiterleitung:/v2/docs/");' und 'registry.addViewController ("/v2/docs/"). setViewName ("forward: /v2/docs/index.html"); ' –

0

Spring boot show index.html standardmäßig.

aber index.html sollte in /Mittel/statisch oder /public

Beispiel sein:

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-static 
Verwandte Themen