login.jsp
회원가입을 성공했으면 로그인폼을 만들자

중복되는 부분은 패스하고
form을사용하여 button submit action 이 발생하면 input된 정보를 post 방식으로 loginOK로 보내주는 구문
<form action="loginOk" method="post">
조인 폼을 만들 때와 다른 것은 크게 없다.
인풋 창이 두 개뿐이라 더 쉽게 작성 가능
login.jsp 전체 (table안에 table을 넣어 줄 맞춤이 지저분....)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/menu.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/board.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/header.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/member.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/main.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/content.css?after">
</head>
<body>
<%@ include file="header.jsp" %>
<center>
<table width="70%" border="0" cellspacing="0" cellpadding="10">
<tr height="530">
<td bgcolor="#cba" align="center" height="500">
<form action="loginOk" method="post">
<table bgcolor="#210" height="120" width="300" cellspacing="10px">
<tr align="center" height="50">
<td class="board_br" colspan="2" >
<span class="content07">로그인</span>
</td>
</tr>
<tr align="right" >
<td>
<span class="text01"> ID :</span>
</td>
<td>
<input type="text" name="mid">
</td>
</tr>
<tr align="right">
<td>
<span class="text01">PW :</span>
</td>
<td>
<input type="password" name="mpw">
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input class="button01" type="submit" value="로그인">
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input class="button04" type="button" value="회원가입" onclick="location.href='join'">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</center>
<%@ include file="footer.jsp" %>
</body>
</html>
loginOk.jsp
로그인에서 submit action으로 loginOk로 넘어오면 로그인 정보확인과 세션생성 로그인 성공 실패 안내를 해주는 페이지
DB에 input 받은 id가 존재하는지 체크하는 checkId의 값을 저장
int checkId = Integer.parseInt(request.getAttribute("checkId").toString());
DB에 input 받은 id와 pw를 동시에 만족하는 data를 체크하는 checkPw의 값을 저장
int checkPw = Integer.parseInt(request.getAttribute("checkPw").toString());
아이디가 존재하지 않는다면 alert을 띄우고 이전 페이지로 이동
if(checkId == 0) {
<script type="text/javascript">
alert("입력하신 아이디는 존재하지 않는 아이디입니다.");
history.go(-1);
document.reg_frm.mid.focus();
입력받은 아이디와 패스워드를 갖고 있는 데이터가 없다면 alert을 띄우고 이전 페이지로 이동
}else if(checkPw == 0){
<script type="text/javascript">
alert("입력하신 비밀번호가 틀립니다.");
history.go(-1);
document.reg_frm.mpw.focus();
아이디 비번 확인 후 문제가 없다면 세션을 생성하고(ValidMem 값 대신 id값을 비교하게 만들어서 쓸모없어짐)
}else{
session.setAttribute("ValidMem", "yes");
컨트롤러 세션에서 setAttribute하고 model에 담아 보낸 mname과 mid를 가져와 환영인사를 해준다.
${mname } 님 안녕하세요
${mid} ID로 로그인에 성공하셨습니다.
loginok.jsp 전체
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 성공</title>
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/member.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/main.css?after">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/menu.css?after">
</head>
<body>
<%@ include file="include/header.jsp" %>
<center>
<table width="70%" border="0" cellspacing="0" cellpadding="20">
<tr height="500">
<td bgcolor="#cba" align="center">
<%
int checkId = Integer.parseInt(request.getAttribute("checkId").toString());
int checkPw = Integer.parseInt(request.getAttribute("checkPw").toString());
if(checkId == 0) {
%>
<script type="text/javascript">
alert("입력하신 아이디는 존재하지 않는 아이디입니다.");
history.go(-1);
document.reg_frm.mid.focus();
</script>
<%
}else if(checkPw == 0){
%>
<script type="text/javascript">
alert("입력하신 비밀번호가 틀립니다.");
history.go(-1);
document.reg_frm.mpw.focus();
</script>
<%
}else{
session.setAttribute("ValidMem", "yes");
}
%>
${mname } 님 안녕하세요
<span class="text03">${mid}</span> ID로 로그인에 성공하셨습니다.
<hr>
<input class="button03" type="button" value="홈으로" onclick="location.href='home'">
</td>
</tr>
</table>
</center>
<%@ include file="include/footer.jsp" %>
</body>
</html>
Controller(loing, loginok, logout)
loginok
로그인폼에서 넘어온 mid, mpw를 가져와서 저장
String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");
dao 실행
IDao dao = sqlSession.getMapper(IDao.class);
mid가 db에 존재하는지 체크하는 dao - 쿼리는 mapper에서
int checkId = dao.checkIdDao(mid);
입력받은 id와 pw가 일치하는지 확인하는 dao
int checkPw = dao.checkPwDao(mid, mpw);
chckId, checkPw값을 model.addAttribute에 담아 보낸다.
model.addAttribute("checkId", checkId);
model.addAttribute("checkPw", checkPw);
결괏값이 1이면 해당 id의 pw가 일치하는 것
if (checkPw == 1) {
해당 id의 logininfo를 MemberDto에 담는다.
MemberDto memberDto = dao.loginInfoDao(mid);
세션값을 memberDto에서 가져와서 세팅 해준다.
HttpSession session = request.getSession();
session.setAttribute("id", memberDto.getMid());
session.setAttribute("name", memberDto.getMname());
세팅한 세션값을 model에 실어 보낸다.
model.addAttribute("mid", memberDto.getMid());
model.addAttribute("mname", memberDto.getMname());
logout
세션을 종료하고 로그인 페이지로 리턴
session.invalidate();
controller 추가분
@RequestMapping(value="/login")
public String login() {
return "login";
}
@RequestMapping(value = "/loginOk", method=RequestMethod.POST)
public String loginOk(HttpServletRequest request, Model model) {
String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");
IDao dao = sqlSession.getMapper(IDao.class);
int checkId = dao.checkIdDao(mid);
int checkPw = dao.checkPwDao(mid, mpw);
model.addAttribute("checkId", checkId);
model.addAttribute("checkPw", checkPw);
if (checkPw == 1) {
MemberDto memberDto = dao.loginInfoDao(mid);
HttpSession session = request.getSession();
session.setAttribute("id", memberDto.getMid());
session.setAttribute("name", memberDto.getMname());
model.addAttribute("mid", memberDto.getMid());
model.addAttribute("mname", memberDto.getMname());
}
return "loginOk";
}
@RequestMapping(value = "/logout")
public String logout(HttpSession session) {
session.invalidate();
return "login";
}
Dao
id와 pw를 받아 DB에 해당 data가 있는지 체크하는 checkPwDao
id를 받아 해당 id의 정보들을 찾는 loginInfoDao 를 추가해주고
public int checkPwDao(String mid, String mpw);
public MemberDto loginInfoDao(String mid);
mapper
checkPwDao
id로 들어온 param1 pw로 들어온 param2 가 b_member테이블에 있는지 카운트해주는 쿼리
리턴 값은 0, 1로 정수형으로 받는다.
loginInfoDao
resultType은 정보들을 저장할 수 있는 MemberDto 배열로 받는다.
<select id="loginInfoDao" resultType="com.uragil.LMS.dto.MemberDto">
idao.xml(추가 분)
<select id="checkPwDao" resultType="int">
SELECT COUNT(*) FROM b_member WHERE mid = #{param1} AND mpw = #{param2}
</select>
<select id="loginInfoDao" resultType="com.uragil.LMS.dto.MemberDto">
SELECT * FROM b_member WHERE mid = #{param1}
</select>
admin으로 로그인 시도 로그인 성공 페이지가 보이고 head의 메뉴가 변하는 것을 확인 할 수 있다.

다음은 도서관리페이지 만들기