나머지는 삭제, 수정, 찾기(멤버) 등은 상대적으로 쉬운 것 같아 로그인 기능을 정리해 보려고 한다.
<%@ 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 로 흘러 들어가게 되는 거다.
<%@ 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="아이디">
</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"> <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 으로 넘어가게 된다.
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";
}
}
쿠키에 저장 후 다양한 값에 의해 산출되는 세션 값들 설정
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";
}
}