前提・実現したいこと
Javaでログイン画面を作成する勉強をしています。
入力されたIDとパスワードをデーターベースのリストと照合して、合致すればセッションスコープに保存して、次のサイトの進めるようにしたいと思っています。
入力画面→サーブレット→Modelクラス→DAOクラス→DB
の構成でDBからデーターリストは取得でき、Modelクラスでif関数を使って入力されたデーターと照合まではできています。
###エラーメッセージ
しかしながら、else関数を加えると、一つのデーターだけしかログインできなくなります。
DBのリスト上にある他のデーターを入れても間違えですと反応されてしまいます。
else関数をコメントアウトすると、DBのリスト上すべてのデーターと照合でき、ログインすることができます。
該当のソースコード
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%String msg=(String)request.getAttribute("msg"); 4 String Msg=""; 5 if(msg==null){ 6 Msg=""; 7 } 8 else{ 9 Msg=msg; 10 } 11 %> 12 13<!DOCTYPE html> 14<html> 15<head> 16<meta charset="UTF-8"> 17<title>BoTTes-ログイン-</title> 18<style type="text/css"> 19<!-- 20*{ 21margin:0px;padding:0px; 22} 23.back1{ 24width: 300px; 25height: 50px; 26position: absolute; 27top: 50px; 28left: 510px; 29} 30.font1{ 31font-size: 200%; 32} 33.font3{ 34font-size:100%; 35color:red; 36} 37.back2{ 38width: 1280px; 39height: 50px; 40position: absolute; 41top: 100px; 42left: 0px; 43} 44hr{ 45height: 5px; 46background-color: grey; 47border: none; 48} 49.back3{ 50width: 300px; 51height: 50px; 52position: absolute; 53top: 150px; 54left: 480px; 55} 56.back4{ 57width: 300px; 58height: 50px; 59position: absolute; 60top: 230px; 61left: 600px; 62} 63.submit{ 64font-size: 1em; 65} 66--></style> 67</head> 68<body> 69<div class="back1"><p class="font1"> ログイン画面</p><br> 70 <p class="font3"><%= Msg %></p></div> 71<div class="back2"><hr></div> 72<div class="back3"> 73<form method="post" action="LoginServlet2"> 74<table> 75<tr><td>ユーザーID</td><td><input type="text" name="userid"value=""></td></tr> 76<tr><td>パスワード</td><td><input type="text" name="password" value=""></td></tr> 77</table> 78</div> 79<div class="back4"> 80<input class="submit" type="submit" width=10px height=10px value=" ログイン "> 81<input type="hidden" name="mode" value="login"> 82</div> 83</body> 84</html>
Servlet
1ackage servlet; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.HttpSession; 12 13/** 14 * Servlet implementation class LoginServlet2 15 */ 16@WebServlet("/LoginServlet2") 17public class LoginServlet2 extends HttpServlet { 18 private static final long serialVersionUID = 1L; 19 20 /** 21 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 22 */ 23 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 24 // TODO Auto-generated method stub 25 request.setCharacterEncoding("UTF-8"); 26 27 String mode = request.getParameter("mode"); 28 29 String jsp =""; 30 if(mode==null) { 31 request.setAttribute("msg",""); 32 jsp="login2.jsp"; 33 34 } 35 36 if(mode.equals("login")) { 37 LoginModel2 lm2=new LoginModel2(); 38 jsp=lm2.certify(request); 39 } 40 else if(mode.equals("logout")) { 41 request.setAttribute("msg","ログアウトしました"); 42 HttpSession session = request.getSession(); 43 session.invalidate(); 44 jsp="login2.jsp"; 45 46 } 47 48 RequestDispatcher rd = request.getRequestDispatcher(jsp); 49 rd.forward(request,response); 50 51 52 } 53 54 /** 55 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 56 */ 57 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 58 // TODO Auto-generated method stub 59 doGet(request, response); 60 } 61 62}
Model
1package servlet; 2 3import java.util.List; 4 5import javax.servlet.http.HttpServletRequest; 6import javax.servlet.http.HttpSession; 7 8import beans.RegisterBean2; 9import beans.UserBean; 10import dao.SelectRegisterDAO; 11 12 13public class LoginModel2 { 14 15 public String certify( HttpServletRequest request) { 16 17 18 19 // データーベースからデーターを取り出す 20 SelectRegisterDAO srd = new SelectRegisterDAO(); 21 List<RegisterBean2> list = srd.read(); 22 23 24 //パラメーターの取得 25 String id=request.getParameter("userid"); 26 String password=request.getParameter("password"); 27 String jsp=""; 28 29 for( RegisterBean2 bn : list) { 30 31 String userid=bn.getUserid(); 32 String pw=bn.getPw(); 33 String name=bn.getUsername(); 34 35 //IDとpasswordを照合 36 if(id.equals(userid)&&password.equals(pw)) { 37 38 request.setAttribute("name",name); 39 40 41 //セッション開始 42 HttpSession session=request.getSession(); 43 44 45 UserBean ub = new UserBean(); 46 47 ub.setUserid(userid); 48 ub.setPassword(pw); 49 ub.setName(name); 50 51 52 session.setAttribute("User", ub); 53 54 jsp="login_success.jsp"; 55 } 56 /*else { 57 request.setAttribute("msg","IDもしくはパスワードが間違っています"); 58 jsp="login2.jsp"; 59 60 }*/ 61 62 63 64 } 65 return jsp; 66 67 68 } 69}
DAO
1package dao; 2 3import java.sql.Connection; 4import java.sql.SQLException; 5 6import beans.RegisterBean; 7 8public class RegisterDAO extends BaseDAO{ 9 10 public void create(RegisterBean rdao) { 11 try { 12 //コネクションを取得する 13 Connection con = super.getConnection(); 14 //ステートメント作成 15 java.sql.Statement stmt = con.createStatement(); 16 //SQL文を作成 17 String sql = "INSERT INTO registers(userid,password,name,address,phone)VALUES(" 18 +"'"+rdao.getUserid()+"'," 19 +"'"+rdao.getPassword()+"'," 20 +"'"+rdao.getName()+"'," 21 +"'"+rdao.getAddress()+"'," 22 +"'"+rdao.getPhone()+"')"; 23 24 stmt.executeUpdate(sql); 25 stmt.close(); 26 con.close(); 27 }catch(SQLException e) { 28 e.printStackTrace(); 29 } 30 31 } 32}
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="beans.UserBean" %> 4 <% 5 UserBean ub =(UserBean)session.getAttribute("User"); 6if(ub==null){ 7 response.sendRedirect("LoginServlet2"); 8 9} 10 String user=(String)request.getAttribute("name"); 11 12 %> 13<!DOCTYPE html> 14<html> 15<head> 16<meta charset="UTF-8"> 17<title>BoTTes-ログイン-</title> 18<style type="text/css"> 19<!-- 20*{ 21margin:0px;padding:0px; 22} 23.back1{ 24width: 300px; 25height: 50px; 26position: absolute; 27top: 50px; 28left: 510px; 29} 30.font1{ 31font-size: 150%; 32} 33.font2{ 34font-size:100%; 35} 36.back2{ 37width: 1280px; 38height: 50px; 39position: absolute; 40top: 100px; 41left: 0px; 42} 43hr{ 44height: 5px; 45background-color: grey; 46border: none; 47} 48.back3{ 49width: 300px; 50height: 50px; 51position: absolute; 52top: 150px; 53left: 480px; 54} 55.back4{ 56width: 300px; 57height: 50px; 58position: absolute; 59top: 300px; 60left: 520px; 61} 62 63--></style> 64</head> 65<body> 66<div class="back1"><p class="font1"><%=user %>様</p><br></div> 67<div class="back2"><hr></div> 68<div class="back3"><p class="font2">現在ログインしています<br> 69 コンテンツをご利用できます<br> 70<a href ="../websys/top.html">ショッピング画面へ</a></p> 71</div> 72<div class="back4"> 73<form method="POST" action="LoginServlet2"> 74<input type="submit" value="ログアウト"> 75<input type="hidden" name="mode" value="logout"> 76</form> 77</div> 78</body> 79</html>
試したこと
DAOクラスのDBからのデーターの取得ができているかは、別にクラスを作り確認できました。
DAOクラス→Modelへの受け渡しも、確認できています。
Modelのif関数の照合もできています。
補足情報
Windows10でTomcat7.0.107とEclipse2018を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/14 16:20
2021/01/14 19:06