Java Spring Boot: Як зіставити корінь програми ("/") на index.html?


133

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

Моя структура додатка:

панове

Моє 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");але це не вдається.



3
@UdoKlimaschewski Він показує, як зробити карту, http://localhost:8080/appNameале це не те, що мені потрібно ...
Shoham

1
Вимкнено WebMvcConfigurerAdapter
user1346730

Відповіді:


150

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

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

1
Дякую .. Я не зрозумів, що ... не вдалося знайти одну просту демонстрацію на їхньому сайті, яка показує, що ...
Шохам

12
З посилальних документів : "Якщо ви хочете зберегти функції MVC Spring Boot MVC, і ви просто хочете додати додаткову конфігурацію MVC (перехоплювачі, форматори, контролери перегляду тощо), ви можете додати свій власний @Bean типу WebMvcConfigurerAdapter, але без @EnableWebMvc"
Дейв Сайер

1
Це буде служити index.htmlв /. Але чи можна також змусити браузер фактично змінити URL-адресу /на /index.html?
asmaier

12
Гаразд я зрозумів це. Якщо ви також хочете змінити URL /на /index.htmlвикористання, "redirect:/index.html" а не переслати.
asmaier

4
Я не використовую анотацію @EnableWebMvc, і я не переспрямовую на index.html.
Jelle

44

Приклад відповіді Дейва Сайера:

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
Використовуйте WebMvcConfigurer замість застарілого WebMvcConfigurerAdapter навесні 5
Moose on the Loose

22

якщо це весняний додаток для завантаження.

Spring Boot автоматично визначає index.html у папці public / static / webapp. Якщо ви написали будь-який контролер, @Requestmapping("/")він замінить функцію за замовчуванням, і він не відображатиметься, index.htmlякщо ви не введетеlocalhost:8080/index.html


4
Я створив файл src / main / ресурси / public / index.html і він працював! Спасибі
Джеймс Уоткінс

Це все-таки правда?
FearX

10
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}

8

Оновлення: січень-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");
    }

}

що може бути неправильним, якщо це не працює? ресурси / public / index.html існує; java 13; весна 2.2.2; tomcat
JFFIGK

7

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

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

Потім натисніть URL http: // localhost: 8080 . Сподіваємось, що це допоможе всім.


у моєму випадку це спрацювало, але коли я перейшов з tomcat на Undertow, раптом перестав працювати. тепер мені потрібен спосіб переслати / до мого index.html
німецький Faller

5

Всередині 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 Boot зайнятим сервлет-диспетчером, він точно здійснить пошук, index.htmlі це ім'я буде у випадку чутливості, як це spring.mvc.view.suffixбуло б html, jsp, htm і т.д.

Сподіваюся, це допоможе багатьом.


@ArifMustafa В останніх версіях Sprint Boot я рекомендую також розміщувати веб-сторінки всередині шаблонів.
АріфМустафа

У вас є посилання на це? Я намагаюся створити проект для реагування / скорочення інтерфейсу за допомогою Spring Spring, і я не впевнений у найкращих практиках.
мій

2
  1. Файл index.html повинен знаходитись нижче, ніж розташування - src / ресурси / 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);
       }
    }

1

У мене була така ж проблема. Весняне завантаження знає, де розташовані статичні HTML-файли.

  1. Додайте index.html до ресурсів / статичної папки
  2. Потім видаліть повний метод контролера для кореневого шляху, наприклад @RequestMapping ("/") тощо
  3. Запустіть додаток і перевірте http: // localhost: 8080 (повинен працювати)

0

Ви можете додати RedirectViewController на зразок:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/", "/index.html");
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.