はじめに
DreamHanksの松下です。
前回はヴァリデーションチェックについて解説をしました。
今回は受け取ったリクエストパラメータがユーザ情報と一致しているか
を検証する方法を解説します。
ビジネスロジックを作る
ビジネスロジックとはDB操作や計算をするソースコードです。
serviceクラスを設けてそこでメソッドを作り、コントローラから呼び出します。
DB操作や計算はサービス(ビジネスロジック)に任せる
DB操作
受け取ったリクエストパラメータのpasswordを使って、そのpasswordと一致するDBのテーブルのレコードを取得します。
今回はSQL文を使わずにmybatisの機能だけ操作します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * ログイン画面で入力されたパスワードでメンバーのオブジェクトを取得する * @param password ログイン画面で入力されたパスワード * @return メンバーのオブジェクト */ public Member getMemberByPassword(String password) { MemberExample memberExample = new MemberExample(); memberExample.createCriteria().andPasswordEqualTo(password); List<Member> memberList = memberMapper.selectByExample(memberExample); if (memberList.isEmpty()) { return null; } else { return memberList.get(0); } } |
MemberExample クラスはmybatisジェネレータでDBのテーブルそれぞれに自動生成されるものです。
こちらのクラスにシンプルなDB操作をするためのメソッドが定義されています
createCriteria()メソッドを使うことで、SQL文で言うWHERE句を簡単に作れます。
1 |
memberExample.createCriteria().andPasswordEqualTo(password); |
今回はpasswordと一致しているかどうかの判定なのでandPasswordEqualTo()メソッドを使います。
そのほかにも条件を繋げたい場合は下記のようにネスト(メソッドの入子)してください
1 |
memberExample.createCriteria().andPasswordEqualTo(password).andDfEndTimeIsNotNull(); |
サーブレットとしての役割
前回で解説したようにサーブレットとはWebページを動的にレスポンスするためのものです。
今回はpasswordがテーブルと一致した場合、次の画面。
一致しなかった場合、ログイン画面に差し戻すという風に動的にレスポンスを行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 入力されたパスワードからメンバー情報を取得する Member member = memberService.getMemberByPassword(password); // パスワードが正しい場合、勤務時間選択画面に遷移する if (member != null) { // model.addAttribute(); return "worktime_choice"; } // パスワードが間違っている場合、ログイン画面に遷移する else { //パスワードに一致するメンバーのデータが取得できませんでした。 // これがヴァリデーションではく、DBに情報がない場合のサーバーサイドでのエラーメッセージの出し方。 model.addAttribute("message", "パスワードに一致するメンバー情報がありません。"); return "login"; } |
このようにif文を使い、サービスから取得したmemberがnullではないならば
次の画面へ遷移。nullならば、ログイン画面に差し戻すという風に動的にレスポンスを行います。
メッセージの出力方法
password不一致によりログイン画面に差し戻す場合に、その理由をメッセージとして画面に表示します。
1 |
model.addAttribute("message", "パスワードに一致するメンバー情報がありません。"); |
model.addAttributeを使ってmessageという文字列に”メッセージ内容”をattributeします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<html> <head> <title>login</title> </head> <body> <h1> ログイン画面 </h1> <f:form action="${pageContext.request.contextPath }/member/loginProcess" method="post" modelAttribute="loginForm"> <f:input type="password" path="password" /> <input type="submit" value="ログイン"> <f:errors path="password" /> ${message} </f:form> </body> </html> |
次にlogin.jsp内で${message}を記述しておいて、password不一致の場合
attributeされたものが、ログイン画面に差し戻された場合に表示されるようにします。
最後に
・DBからデータを取得
・結果によって動的にWebページをレスポンスする
・エラーメッセージの表示方法
の3点を解説しました。
次回は「勤務時間選択画面」表示の解説を行います。
お読みいただきありがとうございました。
コメント