2024-01-25(34일차) - JSP_AM_2024_01

민짱·2024년 1월 25일

📅2024. 01. 25 34일차


🎬JSP_AM_2024_01 구현

아이디 중복 체크 구현

💡띵킹타임

  • 아이디 중복 체크
    DB에 저장되 있는 loginId을 가져와서 input하는 loginId와 같은지 다른지 알아야 하지 않을까????

  • 회원가입 아이디 입력창에서 아이디 입력하고 중복체크를 버튼식으로 만들고 버튼을 누르면 DB에 저장된 loginId을 가져와 비교해서 알려주게 만들면 되나???

  • 어떻게 해야함????;;;;

  • 버튼을 누르면 중복아이디 체크할 수 있는 jsp 파일로 넘어가야 할 것 같은데?? 지금 join.jsp 파일의 form action경로는 dojoin인데?? 경로를 두 개로 가질 수 있을 까???

해결 중 ( 완료 )

insert 될 때 그 아이디가 DB에 있는지 한 번 찾는 과정이 필요할 것 같은데 select 쿼리문 하나 추가 하면 될 것 같음
SELET count 해서 아이디가 있으면 1, 없으면 0으로 불린값을 가져온다. 중복 아이디가 없어 참이면 회원가입이되고 중복 아이디이면 알림창이 뜨게하고 다시 회원가입 창으로 돌린다.

SecSql sql = SecSql.from("SELECT COUNT(*) AS cnt");
			sql.append("FROM `member`");
			sql.append("WHERE loginId = ?;", loginId);

			boolean isJoinableLoginId = DBUtil.selectRowIntValue(conn, sql) == 0;

			if (isJoinableLoginId == false) {
				response.getWriter().append(String.format(
						"<script>alert('%s는 이미 사용중입니다'); location.replace('../member/join');</script>", loginId));
				return;
			}

로그인 구현

💡띵킹타임

일단 비슷한 memberJoin을 가져오자 로그인을 하려면 로그인 form을 만들어야겠네??? 이거 그냥 회원가입 만들 때 만든거 가져와서 수정하자 그리고???? 로그인 하려면 일단 DB에 저장되있는 아이디를 쳤는지 알아야하는데??? 중복 체크 할 때 쓴 걸 가져와서 없는 아이디일 경우 팝업창 뜨게 하고 다시 로그인 창으로 되돌리면 될 것 같은데??? 그럼 만약 있는 아이디이면?? 비밀번호도 체크해야하지 않을까? 그럼 DB에서 로그인 하려는 아이디의 1행 짜리의 정보를 가져오고 입력한 비밀번호랑 비교하면 될 것 같음

구현 시작

  • MemberDoLoginServlet
			String loginId = request.getParameter("loginId");
			String loginPw = request.getParameter("loginPw");
			String name = request.getParameter("name");

			SecSql sql = SecSql.from("SELECT COUNT(*) AS cnt");
			sql.append("FROM `member`");
			sql.append("WHERE loginId = ?;", loginId);

			boolean isJoinableLoginId = DBUtil.selectRowIntValue(conn, sql) == 0;

			if (isJoinableLoginId == true) {
				response.getWriter().append(String.format(
						"<script>alert('%s는 없는 아이디입니다.'); location.replace('../member/login');</script>", loginId));
				return;
			}
			
			

			sql = SecSql.from("SELECT *");
			sql.append("FROM `member`");
			sql.append("WHERE loginId = ?;", loginId);

			Map<String, Object> memberRow = DBUtil.selectRow(conn, sql);
			
		
			
			if (loginPw.equals(memberRow.get("loginPw")) == false) {
				
				response.getWriter().append(String.format(
						"<script>alert('%s의 비밀번호가 틀립니다.'); location.replace('../member/login');</script>", loginId));
				return;
			}else {
				
				response.getWriter().append(String.format(
						"<script>alert('%s님, 로그인 되었습니다.'); location.replace('../article/list');</script>", loginId));
			}
  • MemberLoginServlet
@WebServlet("/member/login")
public class MemberLoginServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getRequestDispatcher("/jsp/member/login.jsp").forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
  • login.jsp
<%
Map<String, Object> articleRow = (Map<String, Object>) request.getAttribute("memberRow");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
</head>
<body>
	<div>
		<a href="../home/main">메인으로 돌아가기</a>
	</div>

	<!-- 	<a href="https://www.naver.com" -->
	<!-- 		onclick="if(confirm('진짜 이동 할거임????') == false) return false;">naver</a> -->

	<h2>로그인</h2>

	<script type="text/javascript">
		var LoginForm__submitDone = false;

		function LoginForm__submit(form) {
			if (LoginForm__submitDone) {
				alert('이미 처리중입니다');
				return;
			}
			// 			form.loginId.value = form.loginId.value.trim();
			var loginId = form.loginId.value.trim();
			var loginPw = form.loginPw.value.trim();
			

			console.log('form.loginId.value : ' + loginId);
			console.log('form.loginPw.value : ' + loginPw);
			
			if (loginId.length == 0) {
				alert('아이디를 입력해주세요');
				form.loginId.focus();
				return;
			}
			if (loginPw.length == 0) {
				alert('비밀번호를 입력해주세요');
				form.loginPw.focus();
				return;
			}
			
			JoinForm__submitDone = true;
			form.submit();

		}
	</script>

	<form method="POST" action="doLogin"
		onsubmit="LoginForm__submit(this); return false;">
		<div>
			로그인 아이디 : <input autocomplete="off" type="text"
				placeholder="아이디를 입력해주세요" name="loginId" />
		</div>
		<div>
			로그인 비밀번호 : <input autocomplete="off" type="text"
				placeholder="비밀번호를 입력해주세요" name="loginPw" />
		</div>
		
		<button type="submit">로그인</button>
	</form>


	<div>
		<a style="color: green" href="../article/list">리스트로 돌아가기</a>
	</div>

</body>
</html>

로그아웃 구현

try {
			Class.forName(Config.getDbDriverClassName());
		} catch (ClassNotFoundException e) {
			System.out.println("클래스가 없습니다.");
			e.printStackTrace();
		}

		Connection conn = null;

		try {
			conn = DriverManager.getConnection(Config.getDbUrl(), Config.getDbUser(), Config.getDbPw());

			HttpSession session = request.getSession();
			session.removeAttribute("loginedMemberId");
			session.removeAttribute("loginedMemberLoginId");
			session.removeAttribute("loginedMember");

			response.getWriter().append(
					String.format("<script>alert('로그아웃 되었습니다.'); location.replace('../article/list');</script>"));

HttpSession이란?

  • HttpSesstion session = requset.grtgetSession();

0개의 댓글