Java Spring Boot: ¿Cómo puedo asignar mi raíz de aplicación (“/”) a index.html?

Soy nuevo en Java y en Spring. ¿Cómo puedo asignar mi raíz de la aplicación http://localhost:8080/ a static index.html ? Si navego a http://localhost:8080/index.html funciona bien.

La estructura de mi aplicación es:

dirs

Mi config\WebConfig.java ve así:

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

Traté de agregar registry.addResourceHandler("/").addResourceLocations("/index.html"); pero falla

Habría salido de la caja si no hubiera usado la anotación @EnableWebMvc . Cuando lo hace, apaga todas las cosas que Spring Boot hace por usted en WebMvcAutoConfiguration . Puede eliminar esa anotación, o puede volver a agregar el controlador de vista que apagó:

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

Un ejemplo de la respuesta 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"); } }; } } 

si es una aplicación de arranque de spring.

Spring Boot detecta automáticamente index.html en la carpeta public / static / webapp. Si ha escrito cualquier controlador @Requestmapping("/") , anulará la característica predeterminada y no mostrará el index.html menos que escriba localhost:8080/index.html

 @Configuration @EnableWebMvc public class WebAppConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addRedirectViewController("/", "index.html"); } } 
  1. El archivo index.html debe aparecer debajo de la ubicación – src / resources / public / index.html O src / resources / static / index.html si ambas ubicaciones están definidas, entonces, la primera vez que aparece index.html se llamará desde ese directorio.
  2. El código fuente parece …

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

Dentro de Spring Boot , siempre coloco las páginas web dentro de una carpeta como public o webapps o views y las coloco dentro del directorio src/main/resources como puede ver también en application.properties .

Spring_Boot-Project-Explorer-View

y esta es mi 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 

tan pronto pones la url como servername:15800 y esta solicitud es recibida por Spring Boot ocupada por el despachador de servlets, buscará exactamente en index.html y este nombre será sensible a mayúsculas y minúsculas como spring.mvc.view.suffix que sería html, jsp , htm etc.

Espero que ayude a muchos.