Login機能を作っているのですが、DBから抽出したデータを画面で表示ができません。
どなたか、お知恵をおかし頂けないでしょうか?問題解決が出来なくて困っています。。
###前提・実現
・前提:
1:AP:Tomcat
2: JSP and Servletを使用
3:Account And Password の入力check
4:以下のSQLを使用してデータの抽出をすること
"Select NAME , ID from USER where ACCOUNT =? And PASWORD =? And DELETE_FLAG=0 "
5:検索処理エラーの場合、"error has occured in login-process"と表示
6:検索結果が0件の場合、"UserName or PW is wrong"と表示
・実現:
DBから抽出した値をlogin_home.jsp画面で表示したい。
できないこと
1:DBからデータの抽出データUserdtoクラスの各フィールド(name and userid)に値を保持していて、その値を取得してlogin_home画面で表示
###わからないこと
1:debugしてname and userid field にそれぞれdbから抽出したデータが入っていることを確認済みなのですが、何故か結果が表示されるないのかがわからない
見直しても上手く動いてくれません。
###SQL(Create and Insert )
SQL
1Create Table 2=============== 3 4CREATE TABLE USER ( 5 ID NUMBER(3,0) 6 ,ACCOUNT VARCHAR2(50) not null 7 ,NAME VARCHAR2(60) 8 ,PASSWORD VARCHAR2(50) 9 ,ADMIN_FLAG char(1) 10 ,DELETE_FLAG char(1) 11 ,REGIST_DATE date DEFAULT SYSDATE 12 ,UPDATE_DATE date 13 ,CONSTRAINT MST_USER_PK PRIMARY KEY(ID) 14 ,CONSTRAINT MST_USER_UK UNIQUE (ACCOUNT)); 15 16==============================================--- 17Insert: 18INSERT INTO USER(ID, ACCOUNT,NAME,PASSWORD,ADMIN_FLAG,DELETE_FLAG) VALUES (003,'jsp123@gmail.com','Grace','Grace12334567', '0','0'); 19
###Jsp
<%@ page contentType="text/html;charset=UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Context-Type" content="text/html;charset=UTF-8"> <title>ログインホーム画面</title> <link rel="stylesheet" href="../css/login_home.css"> </head> <body> <form name="Logout" method="post" action="/Login/jsp/login.jsp"> <label><span class="login_home">Login-HOME</span> </label><br> <p> <% String id = (String)session.getAttribute("UserID"); %> </p> <p> <%=id %> </p> <p> <% String name= (String) session.getAttribute("NAME"); %> </p> <p> <%=name %> </p> <table class="form_area"> <tr> <td>ユーザーID</td> </tr> <tr> <td>ユーザー名</td> </tr> </table> <br /> <div class="button_area"> <input class="logout " type="submit" value="Logout" /> <%if(session.getAttribute("userInfo")!=null){ %> <%session.invalidate(); %> <% }%> </div> </form> </body> </html>
###Dto
java
1 2public class UserDto { 3 /* UserAccount */ 4 private String account; 5 /* UserID */ 6 private int userid; 7 /* Password */ 8 private String password; 9 /* UserName */ 10 private String name; 11 12 /* getter */ 13 14 15 16 public String getACCOUNT() { 17 return account; 18 } 19 20 public int getUserID() { 21 return userid; 22 } 23 24 public String getPASSWORD() { 25 return password; 26 } 27 28 public String getUserName() { 29 return name; 30 } 31 /* setter */ 32 33 public void setACCOUNT(String account) { 34 this.account = account; 35 } 36 37 public void setUserID(int userid) { 38 this.userid = userid; 39 } 40 41 42 public void setPASSWORD(String password) { 43 this.password = password; 44 } 45 46 public void setUserName(String name) { 47 this.name = name; 48 } 49
###Dao
Java
1 2 3import java.sql.Connection; 4 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9 10import LoginCheckServlet; 11import userDto.UserDto; 12 13 14public class LoginDao { 15 // DB connection 16 private static final String HOSTNAME = "0.0.0.0"; 17 private static final String USERNAME = "*****"; 18 private static final String PW = "********"; 19 private static final String SID = "XE"; 20 private static final String URL = "jdbc:oracle:thin:@"; 21 22 private static final String SQL = "Select NAME , ID from USER where ACCOUNT =? And PASSWORD =? And DELETE_FLAG=0 "; 23 24 25 26 27 public UserDto Search(String userAcc, String pw) throws SQLException, Exception { 28 29 30 ResultSet rs; 31 UserDto userDto = null; 32 try (Connection con = this.getConnection(); PreparedStatement ps = con.prepareStatement(SQL)) { 33 ps.setString(1, userAcc); 34 ps.setString(2, pw); 35 36 rs = ps.executeQuery(); 37 while (rs.next()) { 38 39 userDto = new UserDto(); 40 userDto.setUserID(rs.getInt("ID")); 41 userDto.setUserName(rs.getString("NAME")); 42 43 44 } 45 } catch (SQLException e) { 46 e.printStackTrace(); 47 48 } catch (Exception e) { 49 System.exit(1); 50 } 51 52 return userDto; 53 } 54 55 56 57 58 private Connection getConnection() throws SQLException, ClassNotFoundException { 59 60 Class.forName("oracle.jdbc.driver.OracleDriver"); 61 62 Connection con = DriverManager.getConnection(URL + HOSTNAME + ":1521:" + SID, USERNAME, PW); 63 return con; 64 65 } 66 67 public static void main(String args[]) { 68 69 } 70 71}
###Servlet
@WebServlet("/LoginServlet") public class LoginCheckServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final byte MAX = 50; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Start session HttpSession session = request.getSession(); String userAcc = request.getParameter("UserAcc"); String pw = request.getParameter("PW"); if (!(checkUser(userAcc) && checkPW(pw))) { request.setAttribute("ErrorMessage", errorMessage); // login.jspに遷移 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/login.jsp"); dispatcher.forward(request, response); return; } LoginDao dao = new LoginDao(); try { UserDto dto= dao.Search(userAcc, pw); String name = dto.getUserName();//Return Null int userid = dto.getUserID();//return 0 if (name != null) { session.setAttribute("Name", name); session.setAttribute("UserID", userid); RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/login_home.jsp"); dispatcher.forward(request, response); } else { request.setAttribute("ErrorMessage", "UserAcc or PW is wrong"); RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/login.jsp"); dispatcher.forward(request, response); return; } } catch (Exception e) { e.printStackTrace(); } } String errorMessage; public boolean checkUser(String userAcc) { if (userAcc == null || userAcc.isEmpty()) { this.errorMessage = "Please type in your UserAcc"; return false; } if (userAcc.getBytes().length > MAX) { this.errorMessage = "UserAcc should be typed in less than 50 bytes"; return false; } return true; } public boolean checkPW(String pw) { if (pw == null || pw.isEmpty()) { this.errorMessage = "Please type in your PW"; return false; } if (pw.getBytes().length > MAX) { this.errorMessage = "Please type in your PW less than 50 byte"; return false; } return true; } }
###解決したいこと
・Login_home.jspに遷移してDBから抽出したデータを表示したい......Done
・UserDtoクラスの各フィールドにDBから抽出した値を取得.......Done
・Error回避
###試したこと
以下のコードで値を取得して各変数に入れようとしていますが、上手く行きませんでした。(dbから抽出した値を取得できなかった)
UserDto dto = new UserDto();
String name = dto.getUserName();
int userid = dto.getUserID();
###追記
Debugした結果
各フィールドに値を保持していますが、やっぱりNull and 0がかえります。
###追記2 Error
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringが発生してしまいました。
Login_home.jsp
JSP
113: <p> 214: <% 315: String id = (String)session.getAttribute("UserID");//ここでError 416: %> 517: </p> 618: <p>
###期待結果
login_home画面
ユーザID 3
ユーザ名 Grace
###補足情報
Oracle 18c
Java 1.8
Tomcat_version_9
Eclipse を使用
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。