web-dev-qa-db-ja.com

Spring Bootはwebappフォルダーの下でindex.htmlを見つけることができません

spring.io から次のドキュメントを読み、By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpathと表示しましたが、index.htmlファイルを/resources文字列indexがレンダリングされます。現在 index.htmlはwebappの下にあり、AngularJSを使用しています。

directory

MvcConfiguration

@Configuration
public class MvcConfig {

    @Bean
    InternalResourceViewResolver viewResolver(){

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/webapp/");
        resolver.setSuffix(".html");

        return resolver;
    }

}

インデックスページのRESTfulサービス

@RestController
public class IndexController {

    @RequestMapping("/")
    public String index(){
        System.out.println("Looking in the index controller.........");
        return "index";
    }

}

私のIDEコンソールが見えるLooking in the index controller...... IndexControllerから印刷され、Chrome開発ツールのネットワークの下でのみ表示されますlocalhost 200

index.html

<body>

  <!--[if lt IE 7]>
      <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
  <![endif]-->

  <div ng-view></div>

  <div>Angular seed app: v<span app-version></span></div>
11
Mike3355

Spring Boot docs も言う:

アプリケーションがjarとしてパッケージ化される場合は、src/main/webappディレクトリを使用しないでください。このディレクトリは一般的な標準ですが、warパッケージでのみ機能し、jarを生成する場合、ほとんどのビルドツールでこのディレクトリは黙って無視されます。

Spring Bootは非常に独断的であり、デフォルトに抵抗しようとしない場合に最適に機能します。 /src/main/webappにファイルを配置する理由は何もありません。フロントエンドアセットには/src/main/resources/staticを使用してください。それが最も一般的な場所です。

ルートレベルControllerを作成する必要なく、ルートURIからこれらの静的ファイルを自動的に提供します。実際、IndexControllerを使用すると、静的フロントエンドファイルがルートURIから提供されなくなります。静的ファイル用にControllerを作成する必要はまったくありません。

また、ビューリゾルバーはアプリには必要ありません。アプリは単なるREST APIが単一ページで使用されるangularアプリケーションです。したがって、HTMLテンプレートはクライアント上にあります。サーバー側のHTMLを実行している場合は、ビューリゾルバーが必要です。テンプレート化(ThymeleafやJSPなど)するため、その部分も削除します。

33
luboskrnac
@RestController
public class IndexController {

    @RequestMapping("/")
    public String index(){
        System.out.println("Looking in the index controller.........");
        return "index";
    }

}

問題はここにあり、@ RestControllerを使用しているため、この場合、「return 'index';」と書くと、春のブーツはそれをただの答えとしてカバーしています。代わりに@Controllerアノテーションを使用する必要があります。

4