Java Spring Boot: come mappare la mia root app (“/”) a index.html?

Sono nuovo di Java e di Spring. Come posso mappare la mia radice dell’app http://localhost:8080/ a index.html statico? Se navigo in http://localhost:8080/index.html funziona bene.

La mia struttura dell’app è:

dirs

Il mio config\WebConfig.java assomiglia a questo:

 @Configuration @EnableWebMvc @ComponentScan public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("/"); } } 

Ho provato ad aggiungere registry.addResourceHandler("/").addResourceLocations("/index.html"); ma fallisce.

Avrebbe funzionato fuori dalla scatola se non avessi usato @EnableWebMvc annotazione @EnableWebMvc . Quando lo fai, spegni tutte le cose che Spring Boot fa per te in WebMvcAutoConfiguration . È ansible rimuovere quell’annotazione oppure è ansible aggiungere nuovamente il controller della vista che è stato distriggersto:

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

Un esempio della risposta di 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"); } }; } } 

se si tratta di un’app di avvio a molla.

Spring Boot rileva automaticamente index.html nella cartella public / static / webapp. Se hai scritto qualsiasi controller @Requestmapping("/") , sostituirà la funzione predefinita e non mostrerà index.html meno che non digiti localhost:8080/index.html

 @Configuration @EnableWebMvc public class WebAppConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addRedirectViewController("/", "index.html"); } } 
  1. Il file index.html dovrebbe trovarsi al di sotto di location – src / resources / public / index.html OR src / resources / static / index.html se entrambi i percorsi sono definiti, quale prima si verifica index.html chiamerà da quella directory.
  2. Il codice sorgente sembra –

     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); } } 

All’interno di Spring Boot , inserisco sempre le pagine web in una cartella come public o webapps o views e le inserisco nella directory src/main/resources come si può vedere anche in application.properties .

Spring_Boot-Project-Explorer-View

e questa è la mia 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 

appena inserisci l’url come servername:15800 e questa richiesta ricevuta da Spring Boot ha occupato il dispatcher di Servlet, cercherà esattamente index.html e questo nome sarà nel caso sensibile come spring.mvc.view.suffix che sarebbe html, jsp , htm ecc.

Spero che possa aiutare molti.