1단계 - 로그인 폼 작성
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bitcamp</title>
</head>
<body>
<h1>로그인</h1>
<form action='login'>
<table border='1'>
<tr>
<th>이메일</th><td><input name='email' type='email' size='30'></td>
</tr>
<tr>
<th>암호</th><td><input name='password' type='password' size='20'></td>
</tr>
</table>
<button type='submit'>로그인</button>
<a href='../'>취소</a>
</p>
</form>
</body>
</html>
2단계 - 로그인 처리
- LoginController 클래스 생성
- 로그인 사용자 정보를 HttpSession 보관소에 저장
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bitcamp.board.dao.MemberDao;
import com.bitcamp.board.domain.Member;
@WebServlet("/auth/login")
public class LoginController extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberDao memberDao;
@Override
public void init() {
memberDao = (MemberDao) this.getServletContext().getAttribute("memberDao");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String email = request.getParameter("email");
String password = request.getParameter("password");
Member member = memberDao.findByEmailPassword(email, password);
if (member != null) {
HttpSession session = request.getSession();
session.setAttribute("loginMember", member);
}
request.setAttribute("member", member);
response.setContentType("text/html;charset=UTF-8");
request.getRequestDispatcher("/auth/loginResult.jsp").include(request, response);
} catch (Exception e) {
request.setAttribute("exception", e);
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
}
- /webapp/auth/loginResult.jsp 파일 생성
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bitcamp</title>
<meta http-equiv='Refresh' content='1; url=${empty member ? "form.jsp" : "../"}'>
</head>
<body>
<h1>로그인</h1>
<c:choose>
<c:when test="${not empty member}">
<p>로그인 성공입니다!</p>
</c:when>
<c:otherwise>
<p>회원이 존재하지 않습니다!</p>
</c:otherwise>
</c:choose>
</body>
</html>
3단계 - 로그인할 때 입력한 사용자 이메일 저장
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bitcamp.board.dao.MemberDao;
import com.bitcamp.board.domain.Member;
@WebServlet("/auth/login")
public class LoginController extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberDao memberDao;
@Override
public void init() {
memberDao = (MemberDao) this.getServletContext().getAttribute("memberDao");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String email = request.getParameter("email");
String password = request.getParameter("password");
Member member = memberDao.findByEmailPassword(email, password);
if (member != null) {
HttpSession session = request.getSession();
session.setAttribute("loginMember", member);
}
Cookie cookie = new Cookie("email", email);
if (request.getParameter("saveEmail") == null) {
cookie.setMaxAge(0);
} else {
cookie.setMaxAge(60 * 60 * 24 * 7);
}
response.addCookie(cookie);
request.setAttribute("member", member);
response.setContentType("text/html;charset=UTF-8");
request.getRequestDispatcher("/auth/loginResult.jsp").include(request, response);
} catch (Exception e) {
request.setAttribute("exception", e);
request.getRequestDispatcher("/error.jsp").forward(request, response);
}
}
}
- /webapp/auth/form.jsp 변경
- 쿠키 테이블에 보관된 이메일 정보를 꺼내 이메일 입력란에 출력
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bitcamp</title>
</head>
<body>
<h1>로그인</h1>
<form action='login'>
<table border='1'>
<tr>
<th>이메일</th><td><input name='email' type='email' size='30' value="${cookie.email.value}"></td>
</tr>
<tr>
<th>암호</th><td><input name='password' type='password' size='20'></td>
</tr>
</table>
<input type="checkbox" name="saveEmail">이메일 저장<br>
<p>
<button type='submit'>로그인</button>
<a href='../'>취소</a>
</p>
</form>
</body>
</html>