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
감사합니다 .. 나는 그것을 깨닫지 못했습니다 ... 자신의 사이트에서 그것을 보여주는 간단한 데모를 찾을 수 없습니다 ...
Shoham

12
에서 참조 문서 "당신이 봄 부팅 MVC는 기능을 유지하려면, 당신은 당신이 유형의 당신의 자신의 @Bean 추가 할 수 있습니다 (등 인터셉터, 포매터, 뷰 컨트롤러) 추가 MVC 구성을 추가 할 경우 WebMvcConfigurerAdapte,하지만하지 않고 연구를 @EnableWebMvc"
Dave Syer

1
index.html에서 제공 됩니다 /. 그러나 브라우저가 실제로 URL을에서 (으) /로 변경하도록 할 수 /index.html있습니까?
asmaier

12
알았어. 알아 냈어. 경우 당신은 또한에서 URL을 변경하려면 //index.html사용 "redirect:/index.html" 하는 대신 앞으로.
asmaier

4
@EnableWebMvc 주석을 사용하지 않고 index.html로 리디렉션되지 않습니다.
Jelle

44

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

}

8
Spring 5에서 더 이상 사용되지 않는 WebMvcConfigurerAdapter 대신 WebMvcConfigurer를 사용하십시오.
Loose on Moose

22

스프링 부트 앱인 경우

Spring Boot는 public / static / webapp 폴더에서 index.html을 자동으로 감지합니다. 컨트롤러를 작성한 경우 @Requestmapping("/")기본 기능을 무시하고 index.html사용자가 입력하지 않으면 표시되지 않습니다localhost:8080/index.html


4
src / main / resources / public / index.html 파일을 만들었고 작동했습니다! 감사합니다
James Watkins

아직도 그래요?
FearX

10
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}

8

업데이트 : 2019 년 1 월

먼저 resources 아래에 공용 폴더를 만들고 index.html 파일을 만듭니다. WebMvcConfigurerAdapter 대신 WebMvcConfigurer를 사용하십시오.

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

}

이것이 작동하지 않으면 무엇이 잘못 될 수 있습니까? resources / public / index.html이 존재합니다. 자바 13; 봄 2.2.2; 바람둥이
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 버전에서는 웹 페이지를 템플릿 안에 넣는 것이 좋습니다.
ArifMustafa

당신은 그것에 대한 참조가 있습니까? Spring 백엔드로 반응 / redux 프론트 엔드 프로젝트를 만들려고하는데 관련 모범 사례가 확실하지 않습니다.
mike

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

1

나는 같은 문제가 있었다. 스프링 부트는 정적 html 파일의 위치를 ​​알고 있습니다.

  1. resources / static 폴더에 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");
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.