2017-01-15 4 views
1

Ich habe einfache AngularJS Single-Page-Anwendung und Spring Boot für Back-End. Ich muss index.html auf verschiedenen URLs zurückgeben. Ich habe diese Art der Steuerung:Wie funktioniert Spring Boot mit statischem Inhalt?

@Controller 
public class WebResourcesController { 

    @RequestMapping(value = "/sample") 
    public String sample() { 
     return "index"; 
    } 

} 

aber beantragen, localhost:8080/sample kehrt Status . Wenn ich den Controller zu return "index.html"; änderte, bekomme ich korrekte HTML-Datei und Seite geladen. Ich konnte nicht verstehen, wie funktioniert Springboot mit statischem Inhalt, kann jemand erklären?

Antwort

1

Wenn Sie eine Ansicht in einem Controller dienen wollen, müssen Sie sicherstellen, dass die index.html Seite innerhalb der ist src/main/resources/templates Ordner und nicht im öffentlichen oder statischen Ordner (um statische HTML-Seiten zu bedienen).

Jetzt können Sie einen Controller mit einer Abbildung wie folgt machen:

@RequestMapping("/**") 
public String sample() { 
    return "index"; 
} 

So stellen Sie sicher, dass Sie Feder-boot-Starter-thymeleaf auf Ihrem Classpath haben. Dadurch wird sichergestellt, dass Ihre Ansicht von einer View-Engine korrekt analysiert wird (in diesem Fall Thymeleaf).

Standardmäßig läuft Thymeleaf in HTML5 Modus, so dass kein Problem sein sollte, aber es erwartet, dass Tags auch ordnungsgemäß geschlossen werden. Wenn Sie mehr Freiheit haben wollen (z. B., Die Menschen oft nicht schließen <meta> Tags) Sie sollten die nekohtml Abhängigkeit hinzu:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency> 
<dependency> 
    <groupId>net.sourceforge.nekohtml</groupId> 
    <artifactId>nekohtml</artifactId> 
</dependency> 

Sie auch die spring.thymeleaf.mode konfigurieren sollen:

spring.thymeleaf.mode=LEGACYHTML5 

Wenn Sie dies alles tun, können Sie gehen zu jeden Pfad und es zeigt Ihnen die index.html Seite. Dies ist etwas, das Sie normalerweise möchten, wenn Sie Single Page Applications (SPA) schreiben und Sie möchten kein Hash-Standort-Routing (#) verwenden.

1

zu thisFrühling Stiefel Artikel Bezug genommen, können Sie sehen, ob Sie Ihre Inhalte in einem der genannten (in Artikel) Verzeichnisstruktur platziert wird, wird es automatisch geladen werden. Aber wie du gesagt hast index gibt heilig 404 weil;

Es wird erwartet, dass es von einigen ViewResolver behandelt werden, weil es nur ein String ist, und es muss einen Resolver des Frühling Container zu sagen, dass, wenn eine Ressource von bestimmten Verzeichnisstruktur geladen wird es als eine Ansicht umgehen sollte Seite und rendern es im Browser.

Coding Beispiel:

Java-basierte:

@Override 
public void configureViewResolvers(ViewResolverRegistry registry) { 
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
    viewResolver.setViewClass(JstlView.class); 
    viewResolver.setPrefix("/WEB-INF/views/"); 
    viewResolver.setSuffix(".jsp"); 
    registry.viewResolver(viewResolver); 
} 

in einer Config-Klasse, die WebMvcConfigurerAdapter und kommentierte mit @Configuration erstreckt, so sagt es Frühling Container, der String Ansicht Namen zu handhaben.

XML Config:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > 
      <property name="prefix" value ="/WEB-INF/views/" /> 
      <property name="suffix" value =".jsp" /> 
    </bean> 

Hope, ist es Ihnen klar.

1

Sie können auch einfach unter Eigenschaften in application.properties gesetzt

#spring.mvc.view.prefix=/html //folder where html files resides 
spring.mvc.view.suffix=.html 
Verwandte Themen