Java Spring Загрузка: как сопоставить корень приложения ( "/" ) с index.html?

Я новичок в Java и Spring. Как я могу сопоставить корень приложения http://localhost:8080/ со статическим index.html? Если я перейду к http://localhost:8080/index.html, он отлично работает.

Моя структура приложения:

dirs

Мой config\WebConfig.java выглядит следующим образом:

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

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

Я попытался добавить registry.addResourceHandler("/").addResourceLocations("/index.html");, но он не работает.

Ответ 1

Было бы полезно, если бы вы не использовали аннотацию @EnableWebMvc. Когда вы это сделаете, вы отключите все, что Spring Boot делает для вас в WebMvcAutoConfiguration. Вы можете удалить эту аннотацию или добавить обратно контроллер просмотра, который вы отключили:

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

Ответ 2

Пример ответа Дейва Сиера:

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

}

Ответ 3

если это приложение загрузки Spring.

Spring Загрузка автоматически обнаруживает index.html в общедоступной/статической/веб-папке. Если вы написали какой-либо контроллер @Requestmapping("/"), он переопределит функцию по умолчанию и не покажет index.html, если вы не наберете localhost:8080/index.html

Ответ 4

@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}

Ответ 5

Обновление: январь-2019

Сначала создайте общую папку под ресурсами и создайте файл index.html. Используйте WebMvcConfigurer вместо 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");
    }

}

Ответ 6

Внутри Spring Boot я всегда помещаю веб-страницы в папку, такую как public или webapps или views и размещаю ее в каталоге src/main/resources как вы можете видеть в application.properties.

Spring_Boot-Project-Explorer-View

и это мое 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

как только вы поместите URL-адрес, например servername:15800 и этот запрос, полученный Spring-диспетчером Spring Boot, будет точно искать index.html и это имя будет в случае, когда spring.mvc.view.suffix будет html, jsp, htm и т.д.

Надеюсь, это поможет многим.

Ответ 7

  1. index.html файл должен находиться в нижерасположенном месте - src/resources/public/index.html ИЛИ src/resources/static/index.html, если оба определения, определяемые тогда, в которых сначала происходит обращение index.html, вызывают из этого каталога.
  2. Исходный код выглядит так:

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

Ответ 8

У меня такая же проблема. Spring boot знает, где находятся статические html файлы.

  1. Добавьте index.html в папку resources/static
  2. Затем удалите полный метод контроллера для корневого пути, например @RequestMapping ("/") и т.д.
  3. Запустите приложение и проверьте http://localhost:8080 (должно работать)

Ответ 9

Если вы используете последнюю версию spring-boot 2.1.6.RELEASE с простой аннотацией @RestController, вам не нужно ничего делать, просто добавьте файл index.html в папку resources/static:

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

Затем нажмите URL http://localhost:8080. Надеюсь, что это поможет всем.