더보기
MyBatis의 로그인/로그아웃/정보 변경/탈퇴 기능을 구현해 보자
🔥 로그인 기능 🔥
💻 menubar.jsp
👉🏻 c:when의 test 내용을 empty loginUser로 변경, 로그인 폼에 action값 지정, 로그인 시 환영합니다 문구
<c:choose>
<c:when test="${ empty loginUser }">
<!-- 로그인 전에 보여지는 로그인 폼 -->
<!--
현재 나의 url : http://localhost:8888/mybatis/
로그인 시 보낼 url : http://localhost:8888/mybatis/login.me
절대 경로: /mybatis/login.me
상대 경로: login.me
-->
<form action="login.me" method="post">
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="userId" required></td>
<td rowspan="2">
<button type="submit" style="height:50px;">로그인</button>
</td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="userPwd" required></td>
<td></td>
</tr>
<tr>
<td colspan="3" align="center">
<!-- contextRoot 기준으로 내 경로 마지막 값만 기술하는 상대 경로 방식 -->
<a href="enrollForm.me">회원가입</a> |
<a href="">비밀번호 찾기</a>
</td>
</tr>
</table>
</form>
</c:when>
<c:otherwise>
<!-- 로그인 후에 보여지는 프로필 화면 -->
<div>
<!-- table>(tr>td*2)*2 2행 2열 테이블 애밋문법 -->
<table>
<tr>
<td colspan="2">
<h3>${ loginUser.userName }님 환영합니다 ^^</h3>
</td>
</tr>
<tr>
<td><a href="">마이페이지</a></td>
<td><a href="">로그아웃</a></td>
</tr>
</table>
</div>
</c:otherwise>
</c:choose>
💻 LoginController 생성
url mapping: /login.me
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String userPwd = request.getParameter("userPwd");
Member m = new Member();
m.setUserId(userId);
m.setUserPwd(userPwd);
Member loginUser = new MemberServiceImpl().loginMember(m);
// 조회 결과에 따른 응답 페이지 지정
if(loginUser == null) { // 로그인 실패
request.setAttribute("errorMsg" , "로그인 실패");
request.getRequestDispatcher("WEB-INF/views/common/errorPage.jsp").forward(request, response);
} else { // 로그인 성공
// 세션에 로그인한 사용자의 정보를 담기
request.getSession().setAttribute("loginUser", loginUser);
// 메인 페이지로 url 재요청
response.sendRedirect(request.getContextPath());
}
💻 MemberServiceImpl
@Override
public Member loginMember(Member m) {
// 1. SqlSession 객체 생성
SqlSession sqlSession = Template.getSqlSession();
// 2. 생성된 SqlSession 객체와 전달값을 Dao로 넘기면서 요청 후 결과 받기
Member loginUser = new MemberDao().loginMember(sqlSession, m);
// 3. 결과에 따른 트랜잭션 처리 => SELECT문을 실행해서 패스
// 4. SqlSession 객체를 반납
sqlSession.close();
// 5. 결과 반환
return loginUser;
}
💻 MemberDao
public Member loginMember(SqlSession sqlSession, Member m) {
/*
* SELECT문을 실행할 수 있는 메소드
* => 단일 행 조회: selectOne()
* => 여러 행 조회: selectList()
*/
Member loginUser = sqlSession.selectOne("memberMapper.loginMember", m);
// 만약 조회된 게 없다면 null이 담겨 있을 것
return loginUser;
}
💻 member-mapper.xml
<resultMap id="memberResultSet" type="member"> <!-- 별칭 사용! -->
<result column="USER_NO" property="userNo" />
<result column="USER_ID" property="userId" />
<result column="USER_PWD" property="userPwd" />
<result column="USER_NAME" property="userName" />
<result column="EMAIL" property="email" />
<result column="BIRTHDAY" property="birthday" />
<result column="GENDER" property="gender" />
<result column="PHONE" property="phone" />
<result column="ADDRESS" property="address" />
<result column="ENROLL_DATE" property="enrollDate" />
<result column="MODIFY_DATE" property="modifyDate" />
<result column="STATUS" property="status" />
</resultMap>
<select id="loginMember" parameterType="member" resultMap="memberResultSet">
SELECT *
FROM MEMBER
WHERE USER_ID = #{userId}
AND USER_PWD = #{userPwd}
AND STATUS = 'Y'
</select>
💻 숙제
@Override
public int updateMember(Member m) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int deleteMember(Member m) {
// TODO Auto-generated method stub
return 0;
}