実現したいこと
mysqlにて、userテーブル
field | type | null | key | Default | Extra |
---|---|---|---|---|---|
id | varchar(5) | NO | NULL | ||
name | varchar(20) | YES | NULL | ||
pass | varchar(20) | YES | NULL | ||
dep | int | YES | NULL |
depテーブル
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | varchar(5) | NO | NULL | ||
name | varchar(20) | YES | NULL |
を作成し、
userテーブルには、
id | name | pass | dep |
---|---|---|---|
1 | 山田 太郎 | pass1 | 1 |
2 | 山田 花子 | pass2 | 2 |
3 | 山田 三郎 | pass3 | 1 |
depテーブルには、
id | name |
---|---|
1 | 管理部 |
2 | システム開発部 |
3 | 教育事業部 |
を登録しました。
login.jsp よりidとpassを入力しログインボタンを押すと、LoginUserServletConf.javaからUserDao.javaへ行き、userテーブルとdepテーブルから参照取得してLoginUserServletConf.javaに戻り、 menu.jspで”部署:○○ 氏名:○○”と表示させたい。
発生している問題・分からないこと
遷移はするが、部署がNULLで返ってきます。
エラーメッセージ
error
1遷移はされる為、エラーメッセージはありません。
該当のソースコード
java
1import java.io.IOException; 2import javax.servlet.RequestDispatcher; 3import javax.servlet.ServletException; 4import javax.servlet.http.HttpServlet; 5import javax.servlet.http.HttpServletRequest; 6import javax.servlet.http.HttpServletResponse; 7import javax.servlet.http.HttpSession; 8 9 public class UserDao extends HttpServlet { 10 11 public void doGet (HttpServletRequest req, HttpServletResponse res) 12 throws ServletException, IOException { 13 doPost( req, res ); 14 } 15 16 public void doPost(HttpServletRequest req, HttpServletResponse res) 17 throws ServletException, IOException { 18 19 res.setContentType("text/html;charset=UTF-8"); 20 req.setCharacterEncoding("UTF-8"); 21 22 //セッションの取得 23 HttpSession session = req.getSession(true); 24 25 String forward=null; 26 27 //ログインがおされた 28 if(req.getParameter("submit").equals("ログイン")){ 29 30 String uid=req.getParameter("uid"); 31 String upass=req.getParameter("upass"); 32 33 //DAOをインスタンス化 34 UserDao logindao= new UserDao(); 35 //DAOを使用してID・パスワードをチェックする 36 UserBean bean=logindao.loginCheck(uid, upass); 37 DepBean bean2=logindao.loginCheck2(uid,upass); 38 //もし該当者がいれば 39 if(bean != null){ 40 session.setAttribute("uname",bean.getName()); 41 session.setAttribute("dname",bean2.getName()); 42 forward="/web/menu.jsp"; 43 }else{ 44 req.setAttribute("errMsg","※ログインID・パスワードが違います"); 45 forward="/web/login.jsp"; 46 } 47 } 48 RequestDispatcher rd = req.getRequestDispatcher(forward); 49 rd.forward(req, res); 50 } 51 }
java
1import java.sql.PreparedStatement; 2import java.sql.ResultSet; 3import java.sql.SQLException; 4 5public class extends DBAccess{ 6 7 //ユーザーIDとパスワードを使用し、情報を取得し返却する 8 public UserBean loginCheck(String uid ,String upass) { 9 10 UserBean user=null; 11 12 String sql1 = "select * from user where id=? && pass=?"; 13 try { 14 connect(); 15 // ステートメントの作成 16 PreparedStatement ps = getConnection().prepareStatement(sql1); 17 ps.setString(1, uid); 18 ps.setString(2, upass); 19 //select文の実行(値を取得) 20 ResultSet rs=ps.executeQuery(); 21 //値が取得してこれたら 22 if(rs.next()){ 23 //UserBeanを実体化 24 user= new UserBean(); 25 //値の格納 26 user.setName(rs.getString("name")); 27 user.setId(rs.getString("id")); 28 user.setPass(rs.getString("pass")); 29 user.setDep(rs.getInt("dep")); 30 } 31 } catch (SQLException e) { 32 e.printStackTrace(); 33 } finally { 34 disconnect(); 35 } 36 return user; 37 } 38 39 //ユーザーIDとパスワードを使用し、情報を取得し返却する 40 public DepBean loginCheck2(String uid , String upass) { 41 UserBean user=null; 42 DepBean dep =null; 43 String sql2 ="SELECT dep.name FROM user INNER JOIN dep ON user.dep = dep.id WHERE user.id = ? AND user.pass = ?"; 44 try { 45 connect(); 46 // ステートメントの作成 47 PreparedStatement ps2 = getConnection().prepareStatement(sql2); 48 ps2.setString(1, uid); 49 ps2.setString(2, upass); 50 //select文の実行(値を取得) 51 ResultSet rs2=ps2.executeQuery(); 52 //値が取得してこれたら 53 if(rs2.next()){ 54 //DepBeanを実体化 55 dep= new DepBean(); 56 //値の格納 57 dep.setName(rs2.getString("id")); 58 dep.setId(rs2.getString("name")); 59 } 60 } catch (SQLException e) { 61 e.printStackTrace(); 62 } finally { 63 disconnect(); 64 } 65 return dep; 66}
java
1import java.io.Serializable; 2public class DepBean implements Serializable { 3 private String id; 4 private String name; 5 6 7 public String getId() { 8 return id; 9 } 10 public void setId(String id) { 11 this.id = id; 12 } 13 14 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21} 22
java
1import java.io.Serializable; 2public class UserBean implements Serializable{ 3 private String id; 4 private String name; 5 private String pass; 6 private int dep; 7 8 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 16 17 public String getId() { 18 return id; 19 } 20 public void setId(String id) { 21 this.id = id; 22 } 23 24 25 public String getPass() { 26 return pass; 27 } 28 public void setPass(String pass) { 29 this.pass = pass; 30 } 31 32 33 public int getDep() { 34 return dep; 35 } 36 public void setDep(int dep) { 37 this.dep = dep; 38 } 39 40} 41
html
1<%@ page contentType="text/html;charset=UTF-8" language="java"%> 2<html> 3<head> 4<title>aaa</title> 5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6</head> 7<body> 8 <div align="center"> 9 <strong>部署:<%=session.getAttribute("dname") %></strong><br> 10 <strong>氏名:<%=session.getAttribute("uname") %></strong> 11 </div> 12</body> 13</html>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
int型とvarchar型だから?と思い、CAST(user.dep AS CHAR)にしました。
結果、同じく部署のみNULLでした。
補足
値を取得後、depbeanのことしか書いていないのも変だとは思うのですが、どのように変更すればいいのかもわからない状態です。
初心者で、そもそも構成が間違っているかもしれませんが、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー