やりたいこと
userId:null
pass:nullのとき、エラーを表示したいのですが、サーブレットにif文がいっぱいできてしまいました。
もっとスッキリ書きたいのですが、アドバイスいただけないでしょうか。
また、ログインIDを入力してください。のログインIDの部分を変数にしてと言われていて、詰まっています。
フォワード先のjspも併せて記載します。
一般的にエラーがメッセージを表示させるのに、配列をしようすると先輩に聞いたのですが、
できそうにないので、インスタンスに文字列を格納してフォワードで送っています。
package
1import java.io.IOException; 2 3import javax.servlet.RequestDispatcher; 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9import javax.servlet.http.HttpSession; 10 11import model.AccountLogic; 12import model.Login; 13 14@WebServlet("/LoginServlet") 15public class LoginServlet extends HttpServlet { 16 private static final long serialVersionUID = 1L; 17 18 protected void doGet(HttpServletRequest request, 19 HttpServletResponse response) 20 throws ServletException, IOException { 21 22 //フォワード 23 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 24 dispatcher.forward(request, response); 25 } 26 27 protected void doPost(HttpServletRequest request, 28 HttpServletResponse response) 29 throws ServletException, IOException { 30 31 32 //リクエストパラメータの取得 33 request.setCharacterEncoding("UTF-8"); 34 String userId = request.getParameter("userId"); 35 String pass = request.getParameter("pass"); 36 37 38 //ログイン処理の実行 39 Login rs = new Login(); 40 rs.setUserId(userId); 41 rs.setPass(pass); 42 AccountLogic bo = new AccountLogic(); 43 boolean result = bo.execute(rs); 44 45 //ログインの成否によって処理を分岐 46 if(userId == null){ 47 Human human = new Human("ログインIDを入力してください。"); 48 //リクエストスコープにインスタンスを保存 49 request.setAttribute("human", human); 50 51 //リクエストスコープからインスタンスを取得 52 Human h = (Human) request.getAttribute("human"); 53 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 54 dispatcher.forward(request, response); 55 56 }else if(pass == null){ 57 Human human = new Human("パスワードを入力してください。"); 58 //リクエストスコープにインスタンスを保存 59 request.setAttribute("human", human); 60 61 //リクエストスコープからインスタンスを取得 62 Human h = (Human) request.getAttribute("human"); 63 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 64 dispatcher.forward(request, response); 65 } 66 67 68 69 if (result) { //ログイン成功時 70 71 //セッションスコープにユーザーIDを保存 72 HttpSession session = request.getSession(); 73 session.setAttribute("userId", userId); 74 75 //フォワード 76 RequestDispatcher dispatcher = request.getRequestDispatcher("/ListScreen"); 77 dispatcher.forward(request, response); 78 } else { 79 //ログイン失敗時 80 // 81 //インスタンス生成 82 Human human = new Human("ログインに失敗しました。ログインIDまたはパスワードが違います。"); 83 84 //リクエストスコープにインスタンスを保存 85 request.setAttribute("human", human); 86 87 //リクエストスコープからインスタンスを取得 88 Human h = (Human) request.getAttribute("human"); 89 90 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Login.jsp"); 91 dispatcher.forward(request, response); 92 93 } 94 } 95 } 96 97コード
jsp
1<!DOCTYPE HTML> 2<html lang="ja"> 3<head> 4<%@ page language="java" contentType="text/html; charset=Windows-31J" 5 pageEncoding="Windows-31J" %> 6 7<title>Sample</title> 8<% 9 //ここでリクエストスコープを受け取る 10 //getAttributeメソッド 11 //追加した属性を取り出す 12 Human human = (Human) request.getAttribute("human"); 13%> 14<%= human.getName() %> 15 16</head> 17<body> 18 <form id="form" method="post" action=""> 19 <span id="input_error"></span> 20 21 <p> 22 <input type="text" name="user" id="user" /> 23 </p> 24 25 <p> 26 <input type="password" name="password" id="password" /> 27 </p> 28 29 <p> 30 <button id="btn" type="button">送信</button> 31 </p> 32 33 </form> 34 <script type="text/javascript"> 35 function validate() { 36 var user = document.getElementById('user'); 37 var password = document.getElementById('password'); 38 var message = document.getElementById('input_error'); 39 var err = []; 40 if (user.value.toString() === '') { 41 err.push('ログインIDが入力されていません。'); 42 } 43 if (password.value.toString() === '') { 44 err.push('パスワードが入力されていません。'); 45 } 46 if (err.length > 0) { 47 message.innerHTML = err.join('<br>'); 48 return false; 49 } 50 return true; 51 } 52 53 var btn = document.getElementById('btn'); 54 btn.addEventListener('click', function(e) { 55 if (validate()) { 56 document.getElementById('form').submit(); 57 } 58 }); 59 </script> 60</body> 61</html> 62<script type="text/javascript"> 63 function formcheck() { 64 //必須チェック 65 if (document.Form1.userId.value == "") { 66 //エラーを打ち出す 67 document.getElementById('input_error').innerHTML += "ログインIDが入力されていません。"; 68 } 69 if (document.Form1.pass.value == "") { 70 document.getElementById('input_error').innerHTML += "パスワードが入力されていません。"; 71 } 72 } 73</script> 74 75コード
java
1package servlet; 2 3import java.io.Serializable; 4 5public class Human implements Serializable { 6 private String name; 7 8 public Human(String name) { 9 this.name = name; 10 } 11 12 public String getName() { 13 return name; 14 } 15 16 public void setName(String name) { 17 this.name = name; 18 } 19}
java
1package model; 2 3public class Login { 4private String userId; 5private String pass; 6 7public String getUserId() { 8 return userId; 9} 10public void setUserId(String userId) { 11 this.userId = userId; 12} 13public String getPass() { 14 return pass; 15} 16public void setPass(String pass) { 17 this.pass = pass; 18} 19 20} 21
java
1package model; 2 3import dao.AccountDAO; 4 5public class AccountLogic { 6 public boolean execute(Login login) { 7 AccountDAO dao = new AccountDAO(); 8 Account account = dao.findByLogin(login); 9 10 return account != null; 11 } 12} 13






