質問: RequestMethod.POST) public String login(Model model, @Validated(GroupOrder.class) @ModelAttribute("loginForm") LoginForm loginForm, BindingResult result) { if(result.hasErrors()) { return "index"; } model.addAttribute("loginName", loginForm.getLoginName()); return "top"; } } ``` のPostに飛びます。未入力の際、エラーメッセージが出力されます。 ![エラー内容](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/6a1e5e63a3a9ad3cbad608db0668d254.png) このような原因は、postしたときwebapp/WEB-INF/viewにindex.jspがないです。 ただ、jp.ssie.helloworld.web.LoginControllerでgetしたときは、webapp/index.jspに飛ぶのに postしたら、webapp/WEB-INF/viewにとぶのでしょうか。設定の方法がわからないので教えてほしいです。 また、エラー画面でApache Tomcat/6.0.37と表示されています。プロジェクトを実行するときtomcat7を使用したのにこのような画面がでるのは、おかしいのですがspring側で設定を変える必要があるのでしょうか。 【質問内容まとめ】 ・getのときは、webapp/index.jspへ流れるが、postのときは、なぜ、webapp/WEB-INF/viewに流れるのか理由がしりたいのとこの設定を変えるための方法も知りたい。 ・tomcat7でプロジェクトを実行したのに、エラー内容でtomcat/6.0.37とでるのはなぜか理由が知りたいです。 よろしくおねがいします。
回答: > > ・getのときは、webapp/index.jspへ流れるが、postのときは、なぜ、webapp/WEB-INF/viewに流れるのか理由がしりたいのとこの設定を変えるための方法も知りたい。 > > > (2016-08-24 修正) 実際の`web.xml`の内容を確認していないので推測ですが、おそらくこういうことでしょう。 `web.xml`に`welcome-file-list`を記載していない場合、デフォルトの`web.xml`(サーバーの`conf`にある)の`welcome-file-list`に書かれている`index.jsp`が有効になってしまうため、`/`にアクセスすると`index.jsp`を開こうとします。 リクエストマッピングで`/`を設定していても、`GET`の場合は`welcome-file-list`の方が優先されてしまうようです。 トップページとしての`index.jsp`が不要であれば、`index.jsp`は`webapp/`ではなく、`webapp/WEB-INF/view/`に置いた方が良いでしょう。 (以下、元の回答) まず、`index.jsp`は`webapp/`ではなく、`webapp/WEB-INF/view`に置いてください。 `login`を`get`にした場合に`webapp/index.jsp`に飛ぶという方がおかしいですね。何か設定でそうなっているのかも知れませんが、今のところはちょっと分かりません。 コントローラーに`method = RequestMethod.POST`だけを設定しているので、この場合は「未入力の際、エラーメッセージが出力されます。」の下の画面のように"Request method 'GET' not supported"になるのが普通だと思います。 実際そうなりました。 リクエストの戻り値を文字列にした場合は、その名前のJSPファイルを結果画面として開こうとします。 `webapp/WEB-INF/view`の場所はSpringの設定ファイルの`viewResolver`という項目に設定されていると思います。 (元の回答、ここまで) > > ・tomcat7でプロジェクトを実行したのに、エラー内容でtomcat/6.0.37とでるのはなぜか理由が知りたいです。 > > > "tomcat7"という名前でTomcat6サーバーが構築されていませんか? 設定の"サーバー"→"ランタイム環境"を開いて、Tomcat7を選択して編集を押し、インストールディレクトリーを確認して下さい。