56281


STSの「Springスタータープロジェクト」を作成して、実行すると①の画面表示して送信ボタンを押すと次のエラーが表示されます。  
同じ端末にOracleとTOMCATがインストールしているためTOMCATのポートを8081に変更して実行しています。  
何が原因したエラーなのでしょうか？

【エラーメッセージ】

> Whitelabel Error Page  
>  This application has no explicit mapping for /error, so you are seeing this
> as a fallback.
>
> There was an unexpected error (type=Not Found, status=404).  
>  No message available

【①index.html】

[code]

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Hello Page</title>
    </head>
    <body>
        <form method="post" action="/result">
                                名前を入力してください<br>
            <input type="text" name="inputvalue"/>
            <input type="submit" value="送信" />
        </form>
    </body>
    </html>
    
[/code]

【②result.html】  

[code]

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Hello Page2</title>
    </head>
    <body>
                  入力した値はこちらです！
        <p th:text="${message}"></p>
    </body>
    </html>
    
[/code]

【③HelloSpringBootWebController.java】

[code]

    package com.example.demo;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class HelloSpringBootWebController {
        @RequestMapping(value="/", method=RequestMethod.GET)
        public ModelAndView index(ModelAndView mv) {
            mv.setViewName("index");
            return mv;
        }
    
        @RequestMapping(value="/result", method=RequestMethod.POST)
        public ModelAndView send(@RequestParam("inputvalue")String inputvalue, ModelAndView mv) {
            mv.setViewName("result");
            mv.addObject("message", inputvalue);
            return mv;
        }
    }
    
[/code]

【ファイルの格納先】  
src/main/resources/templates/index.html  
src/main/resources/templates/result.html  
src/main/java/com/example/demo/HelloSpringBootWebController.java

【環境】

  * spring-tool-suite-3.9.8
  * JDK12
  * Oracle11g
  * Win10

【エラーが出ています。】  
[![Porn.xmlにエラー](https://i.stack.imgur.com/1usdd.png)](https://i.stack.imgur.com/1usdd.png)


CC BY-SA 4.0
2019-06-30T09:21:41.517
56255
2020-02-22T05:23:10.763
2020-02-22T05:23:10.763
3060
34875
question
java spring-boot
STS　Springスタータ－プロジェクト　404エラー


考えられる一つの原因は、`@SpringBootApplication`のアノテーションを付与したクラスを格納したパッケージが`com.example.demo`や`com.example`ではないことですかね。このクラスのパッケージ配下に`HelloSpringBootWebController`が無いので、コンポーネントスキャンの対象にならないのではないかと予想しました。それでも`index.html`が表示されるのは、実は別のController経由で呼びだされているだけとか。


CC BY-SA 4.0
2019-06-30T13:07:55.273
56266
2019-06-30T13:07:55.273
21092
56255
answer


`src/main/resources/templates` ディレクトリはテンプレートエンジンが利用するディレクトリです([29.1.10
Template Engines](https://docs.spring.io/spring-
boot/docs/2.1.6.RELEASE/reference/html/boot-features-developing-web-
applications.html#boot-features-spring-mvc-template-engines))。  
したがって、テンプレートエンジンの設定を行う必要があります。

Spring Bootでは、(Mavenを選択したのであれば)`pom.xml` の `dependencies`
に次を追加すれば今回のケースについて自動設定されます:

[code]

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    
[/code]

( `result.html` に `th:text` が存在することから、Thymeleafを利用するのだと推測しました。)

あるいは、新規プロジェクト作成時に、次のチェックを追加で入れれば上記と同様の設定が為された状態で作成されます:  
[![画像の説明をここに入力](https://i.stack.imgur.com/xxvsn.png)](https://i.stack.imgur.com/xxvsn.png)

* * *

"`pom.xml`構成問題エラー" については、一度再読込してみてください。Package Explorerでプロジェクトを右クリックし、 **Maven
> Updatge Project** を選択することで再読込できます。  
なお、私が動作確認したものは[こちら](https://github.com/yukihane/stackoverflow-
qa/blob/master/so56255/pom.xml)になります。


CC BY-SA 4.0
2019-07-01T05:20:02.303
56281
2019-07-01T15:44:46.553
2019-07-01T15:44:46.553
2808
2808
56255
answer