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";