Java Spring Boot: Wie ordne ich mein App-Stammverzeichnis ("/") index.html zu?


133

Ich bin neu in Java und im Frühling. Wie kann ich mein App-Stammverzeichnis http://localhost:8080/einer statischen index.htmlDatei zuordnen ? Wenn ich zu ihm navigiere, http://localhost:8080/index.htmlfunktioniert es einwandfrei.

Meine App-Struktur lautet:

dirs

Mein config\WebConfig.javasieht so aus:

@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
        }
}

Ich habe versucht hinzuzufügen, registry.addResourceHandler("/").addResourceLocations("/index.html");aber es schlägt fehl.



3
@UdoKlimaschewski Es zeigt, wie man kartiert, http://localhost:8080/appNameaber es ist nicht das, was ich brauche ...
— Shoham

1
WebMvcConfigurerAdapter ist veraltet
— user1346730

Antworten:


149

Es hätte sofort funktioniert, wenn Sie keine @EnableWebMvcAnmerkungen verwendet hätten. Wenn Sie das tun, schalten Sie alle Dinge aus, die Spring Boot für Sie erledigt WebMvcAutoConfiguration. Sie können diese Anmerkung entfernen oder den von Ihnen ausgeschalteten Ansichts-Controller wieder hinzufügen:

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

1
Danke. Ich habe nicht bemerkt, dass ... ich keine einfache Demo auf ihrer Seite finden konnte, die zeigt, dass ...
— Shoham

12
Aus den Referenzdokumenten : "Wenn Sie die Spring Boot MVC-Funktionen beibehalten und nur zusätzliche MVC-Konfigurationen (Interceptors, Formatierer, View Controller usw.) hinzufügen möchten, können Sie Ihre eigene @ Bean vom Typ WebMvcConfigurerAdapter hinzufügen , jedoch ohne @EnableWebMvc"
— Dave Syer

1
Dies wird dazu dienen , index.htmlauf /. Aber ist es möglich, auch den Browser zu machen eigentlich die URL ändern von /zu /index.html?
— Asmaier

12
Ok, ich habe es herausgefunden. Falls Sie auch von der URL zu ändern , /zu /index.htmlverwenden , "redirect:/index.html" anstatt nach vorn.
— Asmaier

4
Ich verwende die Annotation @EnableWebMvc nicht und werde nicht zu index.html umgeleitet.
— Jelle

44

Ein Beispiel für die Antwort von Dave Syer:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MyWebMvcConfig {

    @Bean
    public WebMvcConfigurerAdapter forwardToIndex() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                // forward requests to /admin and /user to their index.html
                registry.addViewController("/admin").setViewName(
                        "forward:/admin/index.html");
                registry.addViewController("/user").setViewName(
                        "forward:/user/index.html");
            }
        };
    }

}

8
Verwenden Sie WebMvcConfigurer anstelle von veraltetem WebMvcConfigurerAdapter im Frühjahr 5.
— Moose on the Loose

22

wenn es sich um eine Spring Boot App handelt.

Spring Boot erkennt index.html automatisch im Ordner public / static / webapp. Wenn Sie einen Controller geschrieben haben, @Requestmapping("/")überschreibt dieser die Standardfunktion und zeigt ihn nur an, index.htmlwenn Sie ihn eingebenlocalhost:8080/index.html


4
Ich habe eine src / main / resources / public / index.html Datei erstellt und es hat funktioniert! Vielen Dank
— James Watkins

Ist das noch wahr?
— FearX

10
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "index.html");
    }

}

8

Update: Januar 2019

Erstellen Sie zuerst einen öffentlichen Ordner unter Ressourcen und erstellen Sie die Datei index.html. Verwenden Sie WebMvcConfigurer anstelle von WebMvcConfigurerAdapter.

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebAppConfig implements WebMvcConfigurer {

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

}

Was könnte falsch sein, wenn dies nicht funktioniert? resources / public / index.html existiert; Java 13; Feder 2.2.2; Kater
— JFFIGK

7

Wenn Sie die neueste Version spring-boot 2.1.6.RELEASEmit einer einfachen @RestControllerAnmerkung verwenden, müssen Sie nichts tun. Fügen Sie einfach Ihre index.htmlDatei unter dem resources/staticOrdner hinzu:

project
  ├── src
      ├── main
          └── resources
              └── static
                  └── index.html

Dann klicken Sie auf die URL http: // localhost: 8080 . Hoffe, dass es allen helfen wird.


In meinem Fall funktionierte es, aber als ich von Tomcat zu Undertow wechselte, hörte ich plötzlich auf zu arbeiten. Jetzt brauche ich einen Weg, um / zu meinem index.html weiterzuleiten
— German Faller

5

Im Inneren Spring Bootlege ich die Webseiten immer in einen Ordner wie publicoder webappsoder viewsund lege sie in ein src/main/resourcesVerzeichnis, wie Sie auch sehen können application.properties.

Spring_Boot-Project-Explorer-View

und das ist mein application.properties:

server.port=15800
spring.mvc.view.prefix=/public/
spring.mvc.view.suffix=.html
spring.datasource.url=jdbc:mysql://localhost:3306/hibernatedb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.format_sql = true

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Sobald Sie die URL "Gefällt mir" servername:15800und diese vom Spring Boot besetzten Servlet-Dispatcher empfangene Anfrage eingegeben haben, wird genau nach dem gesucht, index.htmlund dieser Name wird bei Groß- und Kleinschreibung als "."spring.mvc.view.suffix HTML, JSP, HTML usw. eingestuft.

Hoffe es würde vielen helfen.


@ArifMustafa In neueren Sprint Boot-Versionen empfehle ich, Webseiten auch in Vorlagen einzufügen.
— ArifMustafa

Haben Sie Referenzen dafür? Ich versuche, ein React / Redux-Frontend-Projekt mit einem Spring-Backend zu erstellen, und bin mir nicht sicher, welche Best Practices verwendet werden.
— Mike

2
  1. Die Datei index.html sollte unter dem Speicherort src / resources / public / index.html ODER src / resources / static / index.html liegen. Wenn beide Speicherorte definiert sind, wird index.html aus diesem Verzeichnis aufgerufen.
  2. Der Quellcode sieht aus wie -

    package com.bluestone.pms.app.boot; 
    import org.springframework.boot.Banner;
    import org.springframework.boot.Banner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    import org.springframework.context.annotation.ComponentScan;
    
    
    
    @SpringBootApplication 
    @EnableAutoConfiguration
    @ComponentScan(basePackages = {"com.your.pkg"}) 
    public class BootApplication extends SpringBootServletInitializer {
    
    
    
    /**
     * @param args Arguments
    */
    public static void main(String[] args) {
    SpringApplication application = new SpringApplication(BootApplication.class);
    /* Setting Boot banner off default value is true */
    application.setBannerMode(Banner.Mode.OFF);
    application.run(args);
    }
    
    /**
      * @param builder a builder for the application context
      * @return the application builder
      * @see SpringApplicationBuilder
     */
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder 
      builder) {
        return super.configure(builder);
       }
    }

1

Ich hatte das gleiche Problem. Spring Boot weiß, wo sich statische HTML-Dateien befinden.

  1. Fügen Sie index.html in den Ordner resources / static ein
  2. Löschen Sie dann die vollständige Controller-Methode für den Root-Pfad wie @RequestMapping ("/") usw.
  3. Führen Sie die App aus und überprüfen Sie http: // localhost: 8080 (sollte funktionieren)

0

Sie können einen RedirectViewController wie folgt hinzufügen:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "/index.html");
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.