본문 바로가기

java,jsp,spring/JSP

JSP 예제 - 사용자 관리(2단계)

1. 로그인 처리

<%@page import="java.net.URLEncoder"%>
<%@page import="magic.member.MemberBean"%>
<%@page import="magic.member.MemberDBBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% 
	String user_id = request.getParameter("id");
	String user_pw = request.getParameter("pw");
	
	MemberDBBean manager = MemberDBBean.getInstance();
	MemberBean mb = manager.getMember(user_id);
	mb.setMem_uid(user_id);
	mb.setMem_pwd(user_pw);
	
	int check = manager.userCheck(user_id, user_pw);
	
	
	if(mb == null) {
%>
		<script>
			alert("존재하지 않는 회원입니다.");
			history.go(-1); // 이전 페이지로 이동
		</script>
<%
	} else {
		String name = mb.getMem_name();
		session.setAttribute("id", user_id); 
		// 방법 1. 세션에 입력받은 id 저장, 키:id, 키값: 입력받은 id
		session.setAttribute("name", name);
		session.setAttribute("Member", "yes"); // url 복사해서 사용하지 못하게 생성
		// String user_name = URLEncoder.encode(name, "UTF-8"); 
		// 방법 2. url로 정보 넘길 경우 : 이름이 한글이면 url로 넘길때 깨지기 때문에 인코딩
		if(check==1){
			response.sendRedirect("main.jsp");
		} else if(check==0){
%>
			<script>
				alert("비밀번호가 틀렸습니다.\n다시 한번 확인해주세요.");
				history.go(-1);
				// sendRedirect로 페이지 이동 시 alert 경고창이 안뜨고 먼저 페이지가 이동됨
			</script>
<%		
		} else {
%>
		<script>
			alert("아이디가 일치하지 않습니다.\n다시 한번 확인해주세요.");
			history.go(-1);
		</script>
<% 
	 	}
	}
%>

- 로그인 페이지에서 넘겨받은 아이디,비밀번호를 MemberBean 객체에 set하고, MemberDBBean 객체를 활용해 userCheck() 메소드 실행

- 아이디가 없으면 존재하지 않는 회원이라는 경고 메시지 출력, 아이디가 있으면 비밀번호를 확인해 로그인하거나 비밀번호가 틀렸다, 아이디는 있지만 비밀번호가 DB상에 있는 아이디와 다를경우 아이디가 일치하지 않다는 메시지 출력

- 넘겨받은 아이디, 이름을 세션에 저장

2. 자바 빈(MemberDBBean) - 아이디 확인 메소드, 회원정보를 조회하는 메소드 추가

public int userCheck(String id, String pw) throws Exception{
		String selectQuery = "SELECT mem_pwd FROM memberT WHERE mem_uid = ?"; 
		// 아이디에 맞는 비밀번호 조회
		int re = -1;
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(selectQuery);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();

			if (rs.next()) {
			// 1건만 조회하기 때문에 while문을 사용하지 않고 if문 사용
				String db_mem_pwd = rs.getString("mem_pwd"); 
			// 속성값에 조회한 비밀번호 입력
				if (db_mem_pwd.equals(pw)) {
					re = 1; // 아이디, 비밀번호 일치
				} else {
					re = 0; // 비밀번호 불일치
				}
			} else {
				re = -1; // 아이디 불일치
			}

		} catch(SQLException ex){
			System.out.print("조회 실패");
			ex.printStackTrace();
		} finally {
			try{
				if(rs != null) {
					rs.close();
				}
				if(pstmt != null) {
					pstmt.close();
				}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}

		return re;
	}
	public MemberBean getMember(String id) throws Exception{
		String selectQuery = "SELECT mem_uid, mem_pwd, mem_name, mem_email, mem_regdate, mem_address"
				              +" FROM memberT WHERE mem_uid = ?";
		// 쿼리는 미리 전체를 불러 오고 필요한 column만 보여주는 식으로 하는것이 톰캣을 
    // 재실행할 필요가 없고 자바 파일을 수정할 필요가 없어서 좋음
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		MemberBean member = null;
		try {
			conn = getConnection();
			pstmt = conn.prepareStatement(selectQuery);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			
			if (rs.next()) {
				member = new MemberBean();
				member.setMem_uid(rs.getString("mem_uid"));
				member.setMem_pwd(rs.getString("mem_pwd"));
				member.setMem_name(rs.getString("mem_name"));
				member.setMem_email(rs.getString("mem_email"));
				member.setMem_regdate(rs.getTimestamp("mem_regdate"));
				member.setMem_addr(rs.getString("mem_address"));
			}
			
		} catch(SQLException ex){
			System.out.print("조회 실패");
			ex.printStackTrace();
		} finally {
			try{
				if(rs != null) {
					rs.close();
				}
				if(pstmt != null) {
					pstmt.close();
				}
				if(conn != null) {
					conn.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return member;
	}

3. 메인

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 
	<% request.setCharacterEncoding("UTF-8"); %> 
	세션에 입력된 값을 받아오기 때문에 안써도 한글 안깨짐
--%> 
<% 
	if(session.getAttribute("Member")==null){ 
		// url 복사해서 사용하면 null이므로 로그인 페이지로 이동
		response.sendRedirect("login.jsp");
	}
	String id = session.getAttribute("id").toString();
	String name = session.getAttribute("name").toString();
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1" align="center">
		<form method="post" action="logOut.jsp">
			<tr>
				<td>
				안녕하세요. <%= name %>(<%= id %>)님
				</td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="로그아웃" />
					&nbsp;&nbsp;&nbsp;&nbsp;
					<input type="button" value="회원정보변경" onclick="javascript:window.location='memberUpdate.jsp'"/>
				</td>		
			</tr>
		</form>
	</table>
</body>
</html>

- 세션에 저장된 아이디값과 이름을 불러옴

4. 로그아웃

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	session.invalidate(); // 세션 삭제
	response.sendRedirect("login.jsp");
%>

- 세션에 저장된 값들을 삭제

'java,jsp,spring > JSP' 카테고리의 다른 글

JSP 게시판  (0) 2022.09.06
JSP 예제 - 사용자 관리(3단계)  (0) 2022.09.03
JSP 예제 - 사용자 관리(1단계)  (0) 2022.09.03
DBCP 기법  (0) 2022.08.26
JSP JDBC  (0) 2022.08.24