web-dev-qa-db-ja.com

Java Spring Boot:アプリのルート(“ /”)を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");を追加しようとしましたが失敗します。

114
Shoham

@EnableWebMvcアノテーションを使用していなければ、そのまま使用できます。これを行うと、Spring BootがWebMvcAutoConfigurationで実行していることはすべて無効になります。そのアノテーションを削除することも、オフにしたView Controllerを追加することもできます。

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

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

}
41
justin

springブートアプリの場合.

Spring Bootはpublic/static/webappフォルダ内のindex.htmlを自動的に検出します。 @Requestmapping("/")というコントローラを書いた場合、それはデフォルトの機能を上書きし、index.htmlと入力しない限りlocalhost:8080/index.htmlは表示されません。

14
Krish
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}
5
Rodrigo Ribeiro

Spring Boot内では、publicwebappsviewsなどのフォルダー内にWebページを常に配置し、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

servername:15800のようなURLを置くと、Spring Bootが受け取ったこのリクエストはサーブレットディスパッチャを占有し、index.htmlを正確に検索します。この名前は、spring.mvc.view.suffixとして大文字小文字を区別します。

それが多くの人を助けることを願っています。

3
ArifMustafa

更新日:2019年1月

まずリソースの下にパブリックフォルダを作成し、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");
    }

}
2
Sampath T
  1. index.htmlファイルはlocationの下に来るはずです - src/resources/public/index.html OR 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);
       }
    }
    
2
Pravind Kumar