Template
Template 게시판, 회원관리, 댓글관리 나눠서 관리하기1(mapper, service, controller 이용 회원가입, 로그인, 로그아웃)
머리방울
2022. 8. 7. 18:11
게시판, 회원관리, 댓글관리 각 영역별 controller, service, sqlmap을 따로 두고
관리하고자 한다.
1. 회원가입 하기
나는 top에서 join을 클릭하면 회원가입 페이지가 나오도록 만들었다.
1) mapper에서 sql작성하기
<insert id="insertMember">
INSERT INTO BOARD_MEMBER (
MEM_ID
, MEM_PW
, MEM_NAME
, MEM_TELL
, MEM_ADDR
, MEM_EMAIL
) VALUES(
#{memId}
, #{memPw}
, #{memName}
, #{memTell}
, #{memAddr}
, #{memEmail}
)
</insert>
2) 인터페이스에서 메소드 생성
int insertMember(MemberDTO memberDTO);
public int insertMember(MemberDTO memberDTO) {
int result = sqlSession.insert("memberMapper.insertMember", memberDTO);
sqlSession.commit();
return result;
}
3) MemberController 작성하기
else if(command.equals("/join.me")) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
String memName = request.getParameter("memName");
String[] memTells = request.getParameterValues("memTell");
String memAddr = request.getParameter("memAddr");
String memEmail = request.getParameter("memEmail");
String memTell = memTells[0]+"-"+memTells[1]+ "-" +memTells[2];
MemberDTO memberDTO = new MemberDTO();
memberDTO.setMemId(memId);
memberDTO.setMemPw(memPw);
memberDTO.setMemName(memName);
memberDTO.setMemTell(memTell);
memberDTO.setMemAddr(memAddr);
memberDTO.setMemEmail(memEmail);
memberService.insertMember(memberDTO);
page = "join_alert.jsp";
(페이지 전체를 다쓸것이기 때문에 contentPage 말고 페이지로 이동으로 쓴다)
}
4) alert.jsp
(처음에 역슬래쉬를 못찾아서 헤맸다 (돈모양 누르면 되는거였다))
<script type="text/javascript">
const result = confirm("회원가입 되었습니다.\n 로그인 하시겠어요?");
if(result){ 확인(true)
location.href='loginForm.me';
}
else{ 취소(false)
location.href='boardList.bo';
}
</script>
2. 로그인하기
1) mapper에서 sql 작성
<select id="selectLogin" resultMap="board">
SELECT MEM_ID
, MEM_NAME
FROM BOARD_MEMBER
WHERE MEM_ID = #{memId}
AND MEM_PW = #{memPw}
</select>
(이름을 가져오는 이유는 000님 반갑습니다 이렇게 표시하기 위해서)
<resultMap type="dto.MemberDTO" id="board">
<id column="MEM_ID" property="memId"/>
<result column="MEM_PW" property="memPw"/>
<result column="MEM_NAME" property="memName"/>
<result column="MEM_TELL" property="memTell"/>
<result column="MEM_ADDR" property="memAddr"/>
<result column="MEM_EMAIL" property="memEmail"/>
<result column="JOIN_DATE" property="joinDate"/>
<result column="IS_ADMIN" property="isAdmin"/>
</resultMap>
2) 인터페이스 메소드
MemberDTO selectLogin(MemberDTO member);
(매개변수로는 아이디와 비밀번호를 받는다. 리턴값으로는 아이디와 이름을 받음)
@Override
public MemberDTO selectLogin(MemberDTO memberDTO) {
MemberDTO result = sqlSession.selectOne("memberMapper.selectLogin", memberDTO);
sqlSession.commit();
return result;
}
3) MemberController 작성하기
else if(command.equals("/login.me")) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
(매개변수로 받은 아이디와 비밀번호)
MemberDTO memberDTO = new MemberDTO();
memberDTO.setMemId(memId);
memberDTO.setMemPw(memPw);
loginInfo에는 아이디와 이름이 들어감
MemberDTO loginInfo = memberService.selectLogin(memberDTO);
로그인 성공은 아이디와 비밀번호를 입력했을 때
memberService.selectLogin(memberDTO)가 null값이 아니면
이름과 아이디 (loginInfo)를 리턴해주니까
로그인 정보를 저장하도록 할 것이다.
if(loginInfo != null) {
HttpSession session = request.getSession();
session.setAttribute("loginInfo", loginInfo);
}
page="login_result.jsp";
4) jsp 화면
★memberDTO.memName처럼 작성하여 데이터를 불러와야한다.
${sessionScope.loginInfo.memId }
${sessionScope.loginInfo.memName }
나는 choose when otherwise를 이용하여 로그인 성공과 실패 했을 때
alert이 뜨도록 설정할 것이다.
★참고로
데이터 비어 있을때(null) : ${empty sessionScope.loginInfo }
데이터 있을 때 : ${not empty sessionScope.loginInfo }
<c:choose>
<c:when test="${not empty sessionScope.loginInfo }">
<script type="text/javascript">
alert("로그인 성공");
location.href='boardList.bo';
</script>
</c:when>
<c:otherwise>
<script type="text/javascript">
alert("아이디 또는 비밀번호가 틀립니다.");
location.href='loginForm.me';
</script>
</c:otherwise>
</c:choose>
5) top.jsp
<c:choose>
<c:when test="${empty sessionScope.loginInfo }">
<a href="loginForm.me">Login</a>
<a href="joinForm.me">Join</a>
</c:when>
<c:otherwise>
${sessionScope.loginInfo.memName }님 반갑습니다.
<a href="logout.me">
LOGOUT
</a>
</c:otherwise>
</c:choose>
3. 로그아웃
else if(command.equals("/logout.me")) {
HttpSession session = request.getSession();
loginInfo라는 이름으로 세션에 저장된 데이터 삭제하겠다!
session.removeAttribute("loginInfo");
또는 세션에 저장된 모든 데이터 삭제 (둘 중 하나 선택)
session.invalidate();
page = "boardList.bo";