로그인 로직에 적용할 DAO 생성
// 쿼리문 내에 ? 가 있다면
// ? 개수만큼 사용자가 입력하게 해야 합니다.
// 그래서 메서드에 요청 파라미터로
// ? 개수만큼 선언해줍니다. 이렇게 메서드 안에 userId를 요구 중이에요.
public UserVO getUserInfo(String userId) {
Connection con = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
// 유저정보를 저장할 수 있는 변수를 생성합니다.
UserVO user = new UserVO();
try 블럭 진입 전에 .close()로 닫아야하는 요소들을
모두 선언했습니다.
그리고 유저정보를 저장할 수 있는
UserVO user를 선언했습니다.
try {
con = DriverManager.getConnection(connectUrl, connectId, connectPw);
String sql = "SELECT * FROM userinfo WHERE user_id = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, userId);
rs = pstmt.executeQuery();
if(rs.next()) {
user.setUserId(rs.getString(1));
user.setUserPw(rs.getString(2));
user.setUserName(rs.getString(3));
user.setEmail(rs.getString(4));
System.out.println("데이터 입력 후 : " + user);
}
} catch(Exception e){
e.printStackTrace();
} finally {
try {
con.close();
rs.close();
pstmt.close();
} catch(Exception e) {
e.printStackTrace();
}
}
return user;
} // getUserInfo() END.
}// UserDAO END.
rs 내부 데이터를 user 변수에 옮겨 넣기 위해
if(rs.next())를 이용해서
데이터를 하나씩 저장했습니다.
저장된 데이터는 user 변수에 담긴 채로 return 됩니다.
Id가 일치하는 DB 데이터를 가져오는지 확인하기
<%
String userId = request.getParameter("userId");
// DAO 생성(MySQL을 쓴다고 지정)
UserDAO dao = new UserDAO();
// DAO 내부 메서드인 getUserInfo(유저명) 호출
UserVO user = dao.getUserInfo(userId);
%>
UserDAO dao = newUserDAO();를 실행함으로
DAO 클래스 내부의 로직이 작동해
userId와 일치하는 데이터를 UserVO user에 저장해줍니다.
body 태그에서 해당 데이터를 화면에 출력해보겠습니다.
<div class="container">
<row>
<div class="col-sm-8 offset-md-2">
<p>
<strong>DAO에서 전달받은 자료들 :</strong>
</p>
<p>
아이디 : <%=user.getUserId() %><br/>
패스워드 : <%=user.getUserPw() %><br/>
이름 : <%=user.getUserName() %><br/>
이메일 : <%=user.getEmail() %><br/>
</p>
<br/>
<hr/>
<p>
진입점 : http://localhost:8181/JSPbasic/user/getUserInfo.jsp?userId=seramat_pagi<br/><br/>
1. getUserInfo.jsp의 11번 라인의 우변에서 userId값 저장(userId=seramat_pagi)<br/><br/>
2. 12번 라인 우변 생성 UserDAO()생성자 실행.<br/><br/>
UserDAO.java의 21~27번 실행(사용 DB정보 세팅)<br/><br/>
3. getUserInfo.jsp의 12번 라인으로 복귀 후 우변 정보 좌변에 대입<br/><br/>
4. getUserInfo.jsp의 16번 라인의 우변 .getUserInfo("seramat_pagi")를 실행<br/><br/>
UserDAO.java의 97번 ~132번 라인까지 실행 seramat_pagi유저 정보 리턴<br/><br/>
5. getUserInfo.jsp의 16번 복귀 후 우변의 seramat_pagi 유저 정보 좌변에 대입<br/><br/>
6. getUserInfo.jsp의 17번 라인에서 자료를 화면에 출력<br/><br/>
결과 : 조회한 회원 정보가 브라우저상에 출력됨.<br/><br/>
</p>
</div>
</row>
</div>
명령을 잘 수행하는 것을 확인했습니다.
그럼 세션을 발급하는 기초적인 로그인 로직을
작성해보겠습니다.
로그인 로직 작성
<%
request.setCharacterEncoding("UTF-8");
String formId = request.getParameter("userId");
String formPw = request.getParameter("userPw");
UserDAO dao = new UserDAO();
UserVO user = dao.getUserInfo(formId);
String dbId = user.getUserId();
String dbPw = user.getUserPw();
String dbName = user.getUserName();
String dbEmail = user.getEmail();
if(dbId != null) {
if(dbPw.equals(formPw)) {
session.setAttribute("s_id", dbId);
session.setAttribute("s_pw", dbPw);
response.sendRedirect("loginWelcome.jsp");
}else {
response.sendRedirect("userPwFail.jsp");
}
} else {
response.sendRedirect("userIdFail.jsp");
}
%>
해당 아이디가 DB에 없을 경우 null이 저장됩니다.
id 데이터를 비교하는 if 문에서
dbId != null를 조건으로 선언한 이유입니다.
아이디와 pw가 같다면 loginWelcome.jsp로 리다이렉트됩니다.
pw가 틀렸다면 userPwFail.jsp로 리다이렉트됩니다.
id가 없다면 userIdFail.jsp로 리다이렉트됩니다.
일단은 여기까지 입니다.