web-dev-qa-db-fra.com

Java Spring Boot: comment mapper la racine de mon application (“/”) sur index.html?

Je suis nouveau dans Java et dans Spring . Comment mapper mon http://localhost:8080/ racine de l’application sur un index.html statique __? Si je navigue vers http://localhost:8080/index.html, cela fonctionne correctement.

Ma structure d'application est:

dirs

Mon config\WebConfig.Java ressemble à ceci:

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

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

J'ai essayé d'ajouter registry.addResourceHandler("/").addResourceLocations("/index.html"); mais cela a échoué.

101
Shoham

Cela aurait fonctionné immédiatement si vous n'aviez pas utilisé l'annotation @EnableWebMvc. Lorsque vous faites cela, vous désactivez tout ce que Spring Boot fait pour vous dans WebMvcAutoConfiguration. Vous pouvez supprimer cette annotation ou rajouter le contrôleur de vue que vous avez désactivé:

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

Un exemple de réponse de 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");
            }
        };
    }

}
39
justin

si c'est une application de démarrage de printemps. 

Spring Boot détecte automatiquement index.html dans le dossier public/statique/webapp. Si vous avez écrit un contrôleur @Requestmapping("/"), il remplacera la fonctionnalité par défaut et le index.html ne s'affichera pas sauf si vous tapez localhost:8080/index.html

14
Krish
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}
5
Rodrigo Ribeiro

Dans Spring Boot, je place toujours les pages Web dans un dossier tel que public ou webapps ou views et le place dans le répertoire src/main/resources comme vous pouvez le voir dans application.properties également.

 Spring_Boot-Project-Explorer-View

et voici mon 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

dès que vous mettez l'URL comme servername:15800 et cette requête reçue par le répartiteur Servlet occupé avec Spring Boot, il recherchera exactement le index.html et ce nom sera en cas de nature sensible comme le spring.mvc.view.suffix qui serait html, jsp, htm etc.

J'espère que cela aiderait beaucoup de monde.

2
ArifMustafa
  1. le fichier index.html devrait se trouver sous l’emplacement - src/resources/public/index.html OU src/resources/static/index.html si les deux emplacements sont définis, alors quel premier se produira index.html appellera depuis ce répertoire.
  2. Le code source ressemble à - 

    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);
       }
    }
    
2
Pravind Kumar

Mise à jour: janvier 2019

Commencez par créer un dossier public sous ressources et créez le fichier index.html . Utilisez WebMvcConfigurer au lieu de 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");
    }

}
1
Sampath T