2017-02-22 2 views
3

lief ich das Feder-boot-Probe-web-statische Projekt von here, machte diese Änderung die pomWie kann ich statisches HTML vom Frühlingsstiefel dienen?

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
</dependency> 

Und hinzugefügt, um diese Klasse eine doppelte Seite index2.html aus den gleichen static Ordnern zu dienen Lage:

import org.springframework.http.MediaType; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

@Controller 
public class Rester { 

    @RequestMapping(value = "/rand", produces = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseBody 
    private RandomObj jsonEndpoint() { 
     return new RandomObj(); 
    } 

    @RequestMapping(value = "/tw") 
    public String somePg() { 
     return "index2"; 
    } 
} 

die json url funktioniert gut, aber wenn ich versuche, localhost zuzugreifen: 8080/tw ich eine leere Seite angezeigt, und dieser Fehler in der Konsole:

2017-02-22 15:37:22.076 ERROR 21494 --- [nio-8080-exec-9] o.s.boot.web.support.ErrorPageFilter  : Cannot forward to error page for request [/tw] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false 

Mache ich etwas falsch? Hilfe wäre dankbar, danke.

+0

Sie brauchen nicht wirklich Tomcat Abhängigkeit, Feder Starter Web & Thymeleaf sollte es tun. –

Antwort

8

Statische Dateien sollten von Ressourcen geliefert werden, nicht vom Controller.

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

Refs:

Frühlings-Boot automatisch statische Web-Ressourcen innerhalb jedem der folgenden Verzeichnisse hinzufügen
https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot https://spring.io/guides/gs/serving-web-content/

+0

oh, ok, also habe ich gesehen, dass localhost: 8080/index2.html tatsächlich vom Browser aus zu sehen ist und es keine Möglichkeit gibt, es vom Controller aus zu bedienen? – osmingo

+0

überprüfen Sie meine zweite Ref Link, oder wenn Sie nicht mit Parametern umgehen wollen: http://Stackoverflow.com/a/27279742/3862022 – csenga

+0

Ich muss Spring-Boot-Starter-Thymeleleaf hinzufügen und beziehen sich nur auf Dateien in den Vorlagen Verzeichnis, ich denke, ich habe es, danke – osmingo

0

Sie das spring boot official Beispiel sehen können in das Projekt mit dem Namen spring-boot-sample-web-static.
Zuerst benötigen Sie extends SpringBootServletInitializer;
Zweitens müssen Sie override die configure-Methode in der Start Application Klasse

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
    return builder.sources(Application.class); 
} 
0

Im Frühjahr Boot, /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:

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

Jetzt können Sie custom/ Ordner unter resources/ verwenden, um statische Dateien zu dienen.

Verwandte Themen