Java Spring Boot:アプリのルート(「/」)をindex.htmlにマップする方法


133

私は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");が失敗する。



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
リファレンスドキュメントから:「Spring Boot MVC機能を維持し、追加のMVC構成(インターセプター、フォーマッター、ビューコントローラーなど)を追加するだけの場合は、タイプWebMvcConfigurerAdapterの独自の@Beanを追加できますが、@EnableWebMvc"
Dave Syer

1
これはで提供さindex.html/ます。しかし、それはまた、ブラウザが実際のURLを変更することが可能である//index.html
2015年

12
わかりました。ケースであなたもからURLを変更したい//index.html使用"redirect:/index.html" の代わりに、前方に。
2015年

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を使用してください
Moose on the Loose

22

それがSpring Boot Appの場合。

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


4
私はsrc / main / resources / public / index.htmlファイルを作成し、それはうまくいきました!ありがとう
ジェームズワトキンス

それは本当ですか?
FearX 2019年

10
@Configuration  
@EnableWebMvc  
public class WebAppConfig extends WebMvcConfigurerAdapter {  

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

}

8

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

}

これが機能しない場合、何が悪いのでしょうか?resources / 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では、Webページを常に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.suffixhtml、jsp、htmなどの大文字と小文字が区別されます。

それが多くの人に役立つことを願っています。


@ArifMustafa最近のSprint Bootバージョンでは、ウェブページもテンプレート内に配置することをお勧めします。
ArifMustafa

その参考資料はありますか?Springバックエンドを使用して、react / reduxフロントエンドプロジェクトを作成しようとしていますが、関連するベストプラクティスがわかりません。
マイク、

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

同じ問題がありました。Springブートは、静的なhtmlファイルがどこにあるかを認識しています。

  1. index.htmlをresources / staticフォルダーに追加します
  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.