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
- index.html файл должен находиться в нижерасположенном месте - src/resources/public/index.html ИЛИ src/resources/static/index.html, если оба определения, определяемые тогда, в которых сначала происходит обращение index.html, вызывают из этого каталога.
-
Исходный код выглядит так:
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 файлы.
- Добавьте index.html в папку resources/static
- Затем удалите полный метод контроллера для корневого пути, например @RequestMapping ("/") и т.д.
- Запустите приложение и проверьте 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.
Надеюсь, что это поможет всем.