質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

2529閲覧

spring4で入力チェックのところで質問をさせてください。

UekiKouji

総合スコア121

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2016/08/19 08:28

いつもお世話になります。今、springの入力チェックのところを勉強させていただいております。

http://tech.pjin.jp/blog/2016/05/30/springframework6/

のサイトを参考にさせていただいています。

elipse 4.5を利用しています。
Spring Legacy ProjectのSimple Spring Web Mavenでプロジェクトを作成しました。
デフォルトのindex.jspを以下のように変更しました。
webapp/index.jsp

<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="f" uri="http://www.springframework.org/tags/form"%> <html> <head> <meta charset="utf-8"> <title>ログイン</title> </head> <body> <f:form modelAttribute="loginForm" action="login" method="post"> <div> ユーザ名:<input type="text" id="loginName" name="loginName"> <f:errors path="loginName" element="div" cssStyle="color:red" /> </div> <div> パスワード:<input type="text" id="loginPassword" name="loginPassword"> <f:errors path="loginPassword" element="div" cssStyle="color:red" /> </div> <div> <input type="submit" value="ログイン"> </div> </f:form> </body> </html>

submitのボタンを押すと
jp.ssie.helloworld.web.LoginController

package jp.ssie.helloworld.web; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import jp.ssie.helloworld.form.LoginForm; import jp.ssie.helloworld.validation.GroupOrder; @Controller public class LoginController { @RequestMapping(value = "/", method = RequestMethod.GET) public String index(Model model) { return "index"; } @RequestMapping(value = "/login", method = 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に飛びます。未入力の際、エラーメッセージが出力されます。

エラー内容

このような原因は、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とでるのはなぜか理由が知りたいです。

よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・getのときは、webapp/index.jspへ流れるが、postのときは、なぜ、webapp/WEB-INF/viewに流れるのか理由がしりたいのとこの設定を変えるための方法も知りたい。

(2016-08-24 修正)

実際のweb.xmlの内容を確認していないので推測ですが、おそらくこういうことでしょう。
web.xmlwelcome-file-listを記載していない場合、デフォルトのweb.xml(サーバーのconfにある)のwelcome-file-listに書かれているindex.jspが有効になってしまうため、/にアクセスするとindex.jspを開こうとします。
リクエストマッピングで/を設定していても、GETの場合はwelcome-file-listの方が優先されてしまうようです。

トップページとしてのindex.jspが不要であれば、index.jspwebapp/ではなく、webapp/WEB-INF/view/に置いた方が良いでしょう。

(以下、元の回答)

まず、index.jspwebapp/ではなく、webapp/WEB-INF/viewに置いてください。

logingetにした場合に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を選択して編集を押し、インストールディレクトリーを確認して下さい。

投稿2016/08/21 05:26

編集2016/08/24 10:27
argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UekiKouji

2016/08/25 22:44

ご連絡が遅くなりすいません。 ご回答ありがとうございます。
UekiKouji

2016/08/25 22:46

エラー内容でtomcat/6.0.37となる理由はわかりませんでした。
UekiKouji

2016/08/25 22:49

しかし、デフォルトで作成されるwebapp/index.jspを削除し、webapp/viewの下に持ってきても動いたので、この設定で行こうと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問