[JSP/Servlet] 6. 회원 탈퇴개발자가 되기까지 (2023.08.16~2024.04.15)/[Servlet] Basic Web2023. 12. 10. 01:53
Table of Contents
mypage.jsp에 회원탈퇴 a태그에 href를 작성한 뒤,
Controller에 case remove 코드를 작성하고 순차적으로 mapper까지 써주면 된다.
그러나 회원 탈퇴는 조금 다른 점이 있다.
String id = request.getParameter("id");
Controller에서 이렇게 코드를 작성하면 주소에 내 ID가 노출된다는 점이다.
이를 방지하고자 mypage.jsp에서 Query String을 사용해서 id 값을 달고 와서
Controller에서 처리하기로 했다.
Query String을 쓰는 방법은 a태그 href에 아래와 같이 써주면 된다.
<a href="/memb/remove?${ses.id}"></a>
주의할 점은 href의 큰 따옴표(" ") 사이 작성할 때는 절대 띄어쓰기를 하면 안된다는 점이다.
여기까지 숙지했다면 위의 코드를 참고하여 mypage.jsp에서 회원탈퇴 a태그를 작성한다.
mypage.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>Insert title here</title>
</head>
<body>
<h1>마이페이지</h1>
<form action="/memb/modify" method="post">
<table>
// ... (기존 코드)
</table>
<button type="submit">수정</button>
<a href="/memb/remove?${ses.id }"><button type="button">회원탈퇴</button></a>
</form>
// ... (기존 코드)
</body>
</html>
회원 탈퇴를 완료하면 index 화면으로 돌아가되 alert도 함께 띄우고 싶어서
index.jsp에 alert를 추가해주었다.
index.jsp
// ... (기존 코드)
<script type="text/javascript">
const msg_join = `<c:out value="${msg_join}" />`;
console.log(msg_join);
if (msg_join == 'welcome') {
alert('회원가입이 완료되었습니다~!!\n환영합니다!');
}
const msg_login = `<c:out value="${msg_login}" />`;
console.log(msg_login);
if (msg_login == 'fail') {
alert('로그인 정보가 일치하지 않습니다.');
}
const msg_remove = `<c:out value="${msg_remove}" />`;
console.log(msg_remove);
if(msg_remove == 'bye') {
alert('Good Bye...!\n');
}
</script>
</body>
</html>
MemberController.java
package controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import domain.MemberVO;
import service.MemberService;
import service.MemberServiceImpl;
@WebServlet("/memb/*")
public class MemberController extends HttpServlet {
// ... (기존 코드)
case "remove":
/* String id = request.getParameter("id");
* 이렇게 하면 주소에 내 아이디가 노출 된다.
* 그래서 mypage.jsp에서 Query String으로 값을 달고 와야하는데
* <a href="/memb/remove?${ses.id}"><button type="button">회원탈퇴</button></a> 요론식으로 하면 됨
* */
try {
HttpSession ses = request.getSession();
MemberVO mvo = (MemberVO) ses.getAttribute("ses");
log.info(">>> ses mvo >>> {}", mvo);
isOk = msv.remove(mvo.getId());
log.info(">>> remove >>> {}", (isOk > 0)? "OK":"FAIL");
ses.invalidate();
if(isOk > 0) {
request.setAttribute("msg_remove", "bye");
}
destPage = "index.jsp";
} catch (Exception e) {
e.printStackTrace();
log.info(">>> remove error");
}
break;
}
// ... (기존 코드)
}
MemberService.interface
package service;
import domain.MemberVO;
public interface MemberService {
int register(MemberVO mvo);
MemberVO login(MemberVO mvo);
int lastLogin(String id);
int modify(MemberVO updateMvo);
int remove(String id);
}
MemberServiceImpl.java
package service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import domain.MemberVO;
import repository.MemberDAO;
import repository.MemberDAOImpl;
public class MemberServiceImpl implements MemberService {
// ... (기존 코드)
@Override
public int remove(String id) {
log.info(">>> remove check 2");
return mdao.delete(id);
}
}
MemberDAO.interface
package repository;
import domain.MemberVO;
public interface MemberDAO {
int insert(MemberVO mvo);
MemberVO login(MemberVO mvo);
int lastLogin(String id);
int update(MemberVO updateMvo);
int delete(String id);
}
MemberDAOImpl.java
package repository;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import domain.MemberVO;
import orm.DatabaseBuilder;
public class MemberDAOImpl implements MemberDAO {
// ... (기존 코드)
@Override
public int delete(String id) {
log.info(">>> remove check 3");
int isOk = sql.update("MemberMapper.remove", id);
if (isOk > 0) sql.commit();
return isOk;
}
}
memberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="MemberMapper">
<insert id="reg">
insert into member(id, pwd, email, team)
values(#{id}, #{pwd}, #{email}, #{team})
</insert>
<select id="login" resultType="mvo">
select * from member
where id = #{id} and pwd = #{pwd}
</select>
<update id="last">
update member set lastlogin = now()
where id = #{id}
</update>
<update id="mypage">
update member set pwd = #{pwd}, email = #{email}, team = #{team}
where id = #{id}
</update>
<delete id="remove">
delete from member where id = #{id}
</delete>
</mapper>
회원탈퇴 성공 시
[JSP/Servlet] 6. 회원 탈퇴
(다음 게시물 예고편)
[JSP/Servlet] 7. 게시판 리스트 - 화면에 뿌리기
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!