実現したいこと
ログイン成功時に出てくる写真のような実行結果が出てきてほしい
イメージ説明
発生している問題・分からないこと
データベースでpdAdmin4を使用してカラム(id,password,name,comment,login_time)も間違えていないが、index.htmlにて実行しても
「idとパスワードが間違っています」となり、ログイン成功しない。
該当のソースコード
EmployeeBean.java
1package bean; 2 3/** 4 * ・社員情報データ(モデル) 5 * 6 */ 7 8public class EmployeeBean { 9 10 private String Id; 11 private String PassWord; 12 private String Name; 13 private String Comment; 14 private String Login_Time; 15 16 public void setId(String Id) { 17 this.Id = Id; 18 } 19 20 public String Id() { 21 return Id; 22 } 23 24 public void setPassWord(String PassWord) { 25 this.PassWord = PassWord; 26 } 27 28 public String getPassWord() { 29 return PassWord; 30 } 31 32 public void setName(String Name) { 33 this.Name = Name; 34 } 35 36 public String getName() { 37 return Name; 38 } 39 40 public void setLogin_Time(String Login_Time) { 41 this.Login_Time = Login_Time; 42 } 43 44 public String getLogin_Time() { 45 return Login_Time; 46 } 47 48 public void setComment(String Comment) { 49 this.Comment = Comment; 50 } 51 52 public String getComment() { 53 return Comment; 54 } 55} 56
EmployeeController.java
1 2package controller; 3 4/** 5 * 社員情報管理コントローラー 6 * 7 */ 8 9import java.io.IOException; 10 11import javax.servlet.RequestDispatcher; 12import javax.servlet.ServletContext; 13import javax.servlet.ServletException; 14import javax.servlet.http.HttpServlet; 15import javax.servlet.http.HttpServletRequest; 16import javax.servlet.http.HttpServletResponse; 17 18import bean.EmployeeBean; 19import service.EmployeeService; 20 21public class EmployeeController extends HttpServlet { 22 public void doPost(HttpServletRequest request, HttpServletResponse response) 23 throws ServletException, IOException { 24 25 try { 26 // 問① index.htmlから送信されたIDとPassWordの値を取得できるように修正してください。 27 String id = request.getParameter("id"); 28 String password = request.getParameter("password"); 29 30 /* 31 * IDとPassWordと元に、社員情報を検索する関数の呼び出し、結果をJSPに渡す処理 32 * ※ EmployeeBeanとEmployeeServiceをimportするのを忘れないでください。 33 */ 34 35 // 問② EmployeeServiceクラスをインスタンス化してください。 36 EmployeeService employeeservice = new EmployeeService(); 37 // 問③ EmployeeBeanに、EmployeeServiceよりsearch関数を呼び出し、返り値を格納してください。 38 EmployeeBean returndata = employeeservice.search(id,password); 39 // 問④ 適切な引数をセットしてください。 40 request.setAttribute("EmployeeBean", returndata); 41 42 } catch (Exception e) { 43 e.printStackTrace(); 44 } finally { 45 ServletContext context = this.getServletContext(); 46 RequestDispatcher dispatcher = context.getRequestDispatcher("/index.jsp"); 47 dispatcher.forward(request, response); 48 } 49 } 50} 51
EmployeeService.java
1package service; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.sql.Statement; 9import java.text.SimpleDateFormat; 10import java.util.Calendar; 11 12import bean.EmployeeBean; 13 14/** 15 * ・社員情報検索サービス 16 * 17 */ 18 19public class EmployeeService { 20 21 // 問① 接続情報を記述してください 22 /** ドライバーのクラス名 */ 23 private static final String POSTGRES_DRIVER = "org.postgresql.Driver"; 24 /** 25 * ・JDMC接続先情報 26 * ポート番号(5432, 5433など)は個人で異なる可能性があります。 27 * 念の為、pgAdminにて対象のpostgreSQLバージョンよりメニューを開き、[プロパティ] -> [接続] を確認してください 28 */ 29 private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/lesson_db"; 30 /** ・ユーザー名 */ 31 private static final String USER = "postgres"; 32 /** ・パスワード */ 33 private static final String PASS = "postgres"; 34 /** ・タイムフォーマット */ 35 private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss"; 36 37 // 問② 入力されたIDを条件にログイン時間を更新するUPDATE文 38 /** ・SQL UPDATE文 */ 39 private static final String SQL_UPDATE = "UPDATE employee_table SET login_time =? id = ?"; 40 41 // 問③ 入力されたIDとPassWordを条件と合致するデータを検索するSELECT文 42 /** ・SQL SELECT文 */ 43 private static final String SQL_SELECT = "SELECT name, comment, login_time FROM employee_table WHERE id = ? AND \"password\" = ?"; 44 45 EmployeeBean employeeData = null; 46 47 // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド 48 public EmployeeBean search(String id, String password) { 49 50 Connection connection = null; 51 Statement statement = null; 52 ResultSet resultSet = null; 53 PreparedStatement preparedStatement = null; 54 55 try { 56 // データベースに接続 57 Class.forName(POSTGRES_DRIVER); 58 connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS); 59 statement = connection.createStatement(); 60 61 // 処理が流れた時間をフォーマットに合わせて生成 62 Calendar cal = Calendar.getInstance(); 63 SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT); 64 65 // PreparedStatementで使用するため、String型に変換 66 String login_time = sdFormat.format(cal.getTime()); 67 68 /* 69 * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 70 */ 71 72 73 // preparedStatementに実行したいSQLを格納 74 preparedStatement = connection.prepareStatement(SQL_UPDATE); 75 // 問④ preparedStatementを使って、第一引数に現在時刻を、第二引数にIDをセットしてください。 76 preparedStatement.setString(1,login_time); 77 preparedStatement.setString(2,id); 78 79 // 問⑤ UPDATEを実行する文を記述してください。 80 preparedStatement.executeUpdate(); 81 82 /* 83 * UPDATEが成功したものを即座に表示 84 * 任意のユーザーを検索できるように、プリペアドステートメントを記述。 85 */ 86 preparedStatement = connection.prepareStatement(SQL_SELECT); 87 // 問⑥ preparedStatementを使って、第一引数にIDを、第二引数にPASSWORDをセットしてください。 88 preparedStatement.setString(1,id); 89 preparedStatement.setString(2,password); 90 91 // SQLを実行。実行した結果をresultSetに格納。 92 resultSet = preparedStatement.executeQuery(); 93 94 while (resultSet.next()) { 95 // 問⑦ tmpName,tmpComment,tmpLoginTimeに適当なデータを格納してください。 96 String tmpName = resultSet.getString("name"); 97 String tmpComment = resultSet.getString("comment"); 98 String tmpLoginTime = resultSet.getString("login_time"); 99 100 // 問⑧ EmployeeBeanに⑦で取得したデータを格納してください。 101 employeeData = new EmployeeBean(); 102 employeeData.setName(tmpName); 103 employeeData.setComment(tmpComment); 104 employeeData.setLogin_Time(tmpLoginTime); 105 } 106 107 // forName()で例外発生 108 } catch (ClassNotFoundException e) { 109 e.printStackTrace(); 110 111 // getConnection()、createStatement()、executeQuery()で例外発生 112 } catch (SQLException e) { 113 e.printStackTrace(); 114 115 } finally { 116 try { 117 118 if (resultSet != null) { 119 resultSet.close(); 120 } 121 if (statement != null) { 122 statement.close(); 123 } 124 if (connection != null) { 125 connection.close(); 126 } 127 128 } catch (SQLException e) { 129 e.printStackTrace(); 130 } 131 } 132 return employeeData; 133 } 134} 135
index.jsp
1<%@ page import="bean.EmployeeBean"%> 2 3<% 4 // 問① getAttributeに適切な引数をセットして、EmployeeControllerから渡されたEmployeeBeanを取得してください。 5 EmployeeBean employeeBean = (EmployeeBean) request.getAttribute("employeeBean"); 6%> 7<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 8<html> 9<head> 10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11<title>検索結果</title> 12</head> 13<body> 14 <div align="center"> 15 <!-- 検索が成功した場合の表示 --> 16 <% 17 if (employeeBean != null) { 18 %> 19 <table border="1"> 20 <tr> 21 <th>社員名</th> 22 <td><%=employeeBean.getName()%></td> 23 </tr> 24 <tr> 25 <th>コメント</th> 26 <td><%=employeeBean.getComment()%></td> 27 </tr> 28 <tr> 29 <th>ログインタイム</th> 30 <td><%=employeeBean.getLogin_Time()%></td> 31 </tr> 32 </table> 33 34 <!-- 問② それ以外の表示(エラーの場合)--> 35 <% } else { %> 36 <p>IDもしくはパスワードが間違ってます</p> 37 <% } %> 38 </div> 39 40</body> 41</html> 42 43 44
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
同じような現象の方をこちらで見つけ、同じようにコードを打ち直しましたが、
idとパスワードが間違っています。と同じ実行結果となった。
補足
pgAdmin4 のポート番号等が違う可能性があるのですが、
プログラミングが初めてでどこが違うのかわかりませんでした。
