JSPbasic DAO_practice.1(로그인 체크)

dwanGim·2022년 4월 8일
0

JSP_basic

목록 보기
8/15

로그인 로직에 적용할 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로 리다이렉트됩니다.

일단은 여기까지 입니다.

profile
배울 게 참 많네요.

0개의 댓글