[JSP] 홈페이지 만들기 (4) : 로그인 기능 만들기

·2023년 11월 15일
0

jsp

목록 보기
16/18
post-thumbnail

# 4. 로그인 기능 만들기

나머지는 삭제, 수정, 찾기(멤버) 등은 상대적으로 쉬운 것 같아 로그인 기능을 정리해 보려고 한다.

(1) 로그인 기능 만들기

📌 1. member/top.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR" import="member.*"%>
<!-- top.jsp -->
<html>
<head>
	<title>멤버관리</title>
	<link rel="stylesheet" type="text/css" href="style.css">
	<script type="text/javascript">
		function checkMember(){
			window.open("memberSsn.mem", "check", "width=640, height=400")
		}
	</script>
</head>
<%
	boolean isLogin = false;
	LoginMember login = (LoginMember)session.getAttribute("loginMember");
	if (login != null) isLogin = true;
%>
<body>
	<div align="center">
	<table border="1" width="800" height="600">
		<tr height="10%">
			<th width="20%"><a href="javascript:checkMember()">회원가입</a></th>
			<th width="20%"><a href="member_list.mem">회원보기</a></th>
			<th width="20%"><a href="member_list.mem?mode=find">회원찾기</a></th>
			<th width="20%"><a href="login.do">로그인</a></th>
			<th width="20%"><a href="index.do">메인페이지</a></th>
		</tr>
		<tr height="80%">
			<td colspan="5">

우선 top.jsp 에 login.do 로 가는 링크를 추가해 주자.
이제 어디서든 login.do로 가면 login 기능을 맛볼 수가 있어진 거다.

그럼 xml에 의해 login.do는

<web-app>
<servlet>
	<servlet-name>front</servlet-name>
	<servlet-class>FrontAppServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>front</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

무조건 frontServlet 으로 이동한다.

그리고 frontServlet 에 의해

		}else if (cmd.equals("/login.do")) {
			nextPage = "/WEB-INF/login/login.jsp";

login.do는 무조건 어디서 어떻게 값이 들어오든 login.jsp 로 이동하게 된다.
login.do를 설치해 둔다? 무조건 login.jsp 로 흘러 들어가게 되는 거다.

📌 2. login/login.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ include file="../member/top.jsp"%>
<!-- login.jsp-->
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript">
	function searchMember(mode){
		window.open("searchMember.mem?mode="+mode, "search", "width=640, height=400")
	}
	function loginCheck(){
		if (f.id.value == ""){
			alert("아이디를 입력해 주세요!!")
			f.id.focus()
			return
		}
		if (f.passwd.value == ""){
			alert("비밀번호를 입력해 주세요!!")
			f.passwd.focus()
			return
		}
		document.f.submit()
	}
</script>
<%
	Cookie[] cks = request.getCookies();
	String value = null;
	if (cks != null && cks.length != 0){
		for(Cookie ck : cks){
			String name = ck.getName();
			if (name.equals("saveId")){
				value = ck.getValue();
			}
			break;
		}
	}
%>
<br>
<div align="center">
<img src="img/bottom.gif" width=570 height="40" border="0" alt="">
<br>
<br>
<img src="img/tm_login.gif" width=100 height="13" border="0" 
	align=center ALT="회원 로그인">
</div>
<form name="f" action="login_ok.mem" method="post">
	<table width="60%" align="center" height="120">
		<tr>
			<td align="right" width="30%">
				<img src="img/id01.gif" 
				width="28" height="11" border="0" alt="아이디">&nbsp;&nbsp;
			</td>
			<td width="40%">
<%			if (value != null){ %>
				<input type="text" name="id" tabindex="1" value="<%=value%>">
<%			}else { %>			
				<input type="text" name="id" tabindex="1">
<%			} %>				
			</td>
			<td rowspan="2" width="30%" valign="middle">
				<a href="javascript:loginCheck()">
					<img src="img/bt_login.gif" border="0" alt="로그인"  tabindex="3">&nbsp;&nbsp;<br>
				</a>
				<nobr>
<%			if (value != null){ %>
					<input type="checkbox" name="saveId" checked>
<%			}else { %>				
					<input type="checkbox" name="saveId">
<%			} %>					
					<font face="굴림" size="2">아이디 기억하기</font>
				</nobr>
			</td>
		</tr>
		<tr>
			<td align="right">
				<img src="img/pwd.gif" 
							width="37" height="11" alt="비밀번호">
			</td>
			<td>
				<input type="password" name="passwd"  tabindex="2">
			</td>
		</tr>
		<tr>
			<td colspan="3" align="center">
				<a href="javascript:checkMember()">
					<img src="img/bt_join.gif" width="60" height="22" alt="회원가입">
				</a>
				<a href="javascript:searchMember('id')">	
 					<img src="img/bt_search_id.gif" width="60" height="22" alt="아이디 찾기">
 				</a>
 				<a href="javascript:searchMember('pw')">	
					<img src="img/bt_search_pw.gif" width="60" height="22" alt="비밀번호 찾기">
				</a>	
								
			</td>
		</tr>
	</table>
</form> 
<%@ include file="../member/bottom.jsp"%>

여기서 로그인 값을 페이지 값으로 가지고 factory에 의해

		}else if (cmd.equals("/login_ok.mem")) {
			cmdIf = new LoginOkCommand();

LoginOkCommand 으로 넘어가게 된다.

📌 3. LoginOkCommand

package member;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginOkCommand implements CommandIf {

	@Override
	public Object processCommand(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		LoginOkBean loginOk = new LoginOkBean();
		loginOk.setId(req.getParameter("id"));
		loginOk.setPasswd(req.getParameter("passwd"));
		String saveId = req.getParameter("saveId");
		
		int res = loginOk.loginOk();
		String msg = null, url = null;
		switch(res){
		case LoginOkBean.OK :
			Cookie ck = new Cookie("saveId", loginOk.getId());
			if (saveId != null) {
				ck.setMaxAge(7*24*60*60);
			}else {
				ck.setMaxAge(0);
			}
			resp.addCookie(ck);
			LoginMember loginMember = new LoginMember();
			loginMember.setId(loginOk.getId());
			loginMember.memberSetting();
			HttpSession session = req.getSession();
			session.setAttribute("loginMember", loginMember);
			msg = loginMember.getName() + "님이 로그인 하셨습니다.";
			url = "index.mem";
			break;
		case LoginOkBean.NOT_ID :
			msg = "없는 아이디 입니다. 다시 확인하시고 입력해 주세요";
			url = "index.mem";
			break;
		case LoginOkBean.NOT_PW :
			msg = "비밀번호가 틀렸습니다. 다시 확인하시고 입력해 주세요";
			url = "index.mem";
			break;
		case LoginOkBean.ERROR : 
			msg = "DB 서버 오류 발생!! 관리자에게 문의해 주세요.";
			url = "index.mem";
			break;
		}
		
		req.setAttribute("msg", msg);
		req.setAttribute("url", url);
		return "message.jsp";
	}

}

쿠키에 저장 후 다양한 값에 의해 산출되는 세션 값들 설정

📌 logoutcommand

factory 값

		}else if (cmd.equals("/logout.mem")) {
			cmdIf = new LogoutCommand();

로그아웃 값

package member;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LogoutCommand implements CommandIf {

	@Override
	public Object processCommand(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		HttpSession session = req.getSession();
		session.invalidate();
		req.setAttribute("msg", "로그아웃 되었습니다.");
		req.setAttribute("url", "index.mem");
		return "message.jsp";
	}

}
profile
자바 백엔드 개발자 개인 위키

0개의 댓글

관련 채용 정보