내가 구현한 기능 소개(마이페이지 ‐ 정보수정 및 회원 탈퇴) - KimByoungKoo/NewLightProject GitHub Wiki
- User가 회원 가입 시 등록한 개인 정보를 변경할 수 있는 기능이다.
MemberFrontController.java
public class MemberFrontController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
private void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String target = req.getRequestURI().substring(req.getContextPath().length());
switch (target) {
// 회원 정보 수정 주소&컨트롤러 넣어주기
case "/mypage/mypageEdit.me":
System.out.println("mypageEdit 들어왔다!!!");
new EditController().execute(req, resp);
break;
// 회원정보 수정 완료 컨트롤러
case "/mypage/mypageEditOk.me":
new EditOkController().execute(req, resp);
break;
}
}
}EditController.java
public class EditController implements Execute{
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
MemberDAO memberDAO = new MemberDAO();
MemberDTO memberDTO = new MemberDTO();
HttpSession session = req.getSession();
Integer memberNumber = (Integer)session.getAttribute("memberNumber");
memberDTO = memberDAO.selectOne(memberNumber);
req.setAttribute("memberDTO", memberDTO);
req.getRequestDispatcher("/app/mypage/mypage_edit.jsp").forward(req, resp);
}
}EditOkController.java
public class EditOkController implements Execute {
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
MemberDTO memberDTO = new MemberDTO();
MemberDAO memberDAO = new MemberDAO();
MemberFileDTO memberfileDTO = new MemberFileDTO();
req.setCharacterEncoding("utf-8");
String uploadPath = req.getSession().getServletContext().getRealPath("/") + "userProfile/";
int fileSize = 1024 * 1024 * 20;
// 폼 데이터 오류 부분
MultipartRequest multipartReq = new MultipartRequest(req, uploadPath, fileSize, "utf-8", new DefaultFileRenamePolicy());
memberDTO.setMemberNumber((Integer)req.getSession().getAttribute("memberNumber"));
memberDTO.setMemberPassword(multipartReq.getParameter("memberPassword"));
memberDTO.setMemberNickname(multipartReq.getParameter("memberNickname"));
memberDTO.setMemberWebsite(multipartReq.getParameter("memberWebsite"));
memberDTO.setMemberPfp(multipartReq.getParameter("memberPfp"));
memberDTO.setMemberComment(multipartReq.getParameter("memberComment"));
memberDTO.setMemberEmail(multipartReq.getParameter("memberEmail"));
memberDTO.setMemberAddress1(multipartReq.getParameter("memberAddress1"));
memberDTO.setMemberAddress2(multipartReq.getParameter("memberAddress2"));
memberDTO.setMemberPhoneNumber(multipartReq.getParameter("memberPhoneNumber"));
Enumeration<String> memberFilepfp = multipartReq.getFileNames();
while(memberFilepfp.hasMoreElements()) {
String name = memberFilepfp.nextElement();
String memberPfpFile = multipartReq.getOriginalFileName(name);
if(memberPfpFile == null) {
continue;
}
memberDTO.setMemberPfp(memberPfpFile);
}
memberDAO.edit(memberDTO);
resp.sendRedirect("/mypage/creationsOk.mp");
}
}MemberDAO
// 회원정보 수정하기
public class MemberDAO {
public SqlSession sqlSession;
public MemberDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
public void edit(MemberDTO memberDTO) {
sqlSession.update("member.edit", memberDTO);
}
}MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="member">
<!-- 회원정보 수정하기 -->
<update id="edit" parameterType="MemberDTO">
update `member`
set
member_password = #{memberPassword}, member_nickname =
#{memberNickname}, member_website = #{memberWebsite}, member_pfp =
#{memberPfp},
member_comment = #{memberComment}, member_email =
#{memberEmail}, member_address1 =
#{memberAddress1}, member_address2 =
#{memberAddress2}
where member_number = #{memberNumber}
</update>
</mapper>마이페이지 - 회원 정보 변경
- User가 회원 가입 후 이용하다 마음에 들지 않을 경우 회원 탈퇴할 수 있는 기능이 있다.
- 회원 탈퇴가 정상적으로 이루어지면 메인 페이지로 이동한다.
MemberFrontController.java
public class MemberFrontController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
private void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String target = req.getRequestURI().substring(req.getContextPath().length());
switch (target) {
// 회원 탈퇴 주소&컨트롤러 넣어주기
case "/member/memberDeleteOk.me":
System.out.println("dddd");
new DeleteOkController().execute(req, resp);
break;
}
}
}DeleteOkController.java
public class DeleteOkController implements Execute {
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
QnACommentDAO qcDAO = new QnACommentDAO();
QnAFileDAO qnaFileDAO = new QnAFileDAO();
MemberDAO memberDAO = new MemberDAO();
LikesDAO likeDAO = new LikesDAO();
CommunityCommentDAO ccDAO = new CommunityCommentDAO();
CommunityFileDAO cfDAO = new CommunityFileDAO();
CommunityDAO communityDAO = new CommunityDAO();
FollowsDAO followsDAO = new FollowsDAO();
CreationCommentDAO creationCommentDAO = new CreationCommentDAO();
CreationsFileDAO creationFileDAO = new CreationsFileDAO();
CreationsDAO creationDAO = new CreationsDAO();
QnADAO qnaDAO = new QnADAO();
MemberFileDAO memberFileDAO = new MemberFileDAO();
HttpSession session = req.getSession();
System.out.println(session.getAttribute("memberNumber"));
int memberNumber = (Integer) session.getAttribute("memberNumber");
String uploadPath = req.getSession().getServletContext().getRealPath("/") + "upload/";
String profilePath = req.getSession().getServletContext().getRealPath("/") + "userProfile/";
List<QnAFileDTO> qnaFiles = qnaFileDAO.selectDelete(memberNumber);
List<CommunityFileDTO> communityFiles = cfDAO.selectDelete(memberNumber);
List<CreationsFileDTO> creationFiles = creationFileDAO.selectDelete(memberNumber);
for (QnAFileDTO file : qnaFiles) {
File temp = new File(uploadPath, file.getFileSystemName());
if (temp.exists()) {
temp.delete();
}
}
for (CommunityFileDTO file : communityFiles) {
File temp = new File(uploadPath, file.getFileSystemName());
if (temp.exists()) {
temp.delete();
}
}
for (CreationsFileDTO file : creationFiles) {
File temp = new File(uploadPath, file.getFileSystemName());
if (temp.exists()) {
temp.delete();
}
}
// 실제 프로필 이미지 파일 삭제 처리
String pfpName = memberDAO.selectProfile(memberNumber);
if (pfpName != null) {
File file = new File(profilePath, pfpName);
if (file.exists()) {
file.delete();
}
}
qcDAO.deleteMember(memberNumber);
qnaFileDAO.deleteMember(memberNumber);
qnaDAO.deleteMember(memberNumber);
likeDAO.deleteMemeber(memberNumber);
ccDAO.deleteMember(memberNumber);
ccDAO.commenteAllDelete(memberNumber);
cfDAO.deleteMember(memberNumber);
communityDAO.deleteMember(memberNumber);
followsDAO.deleteMember(memberNumber);
creationCommentDAO.deleteMember(memberNumber);
creationCommentDAO.commenteAllDelete(memberNumber);
creationFileDAO.deleteMember(memberNumber);
creationDAO.deleteMember(memberNumber);
memberDAO.deleteMember(memberNumber);
session.invalidate();
resp.sendRedirect("/main/mainpageListOk.mi");
}
}QnACommentDAO.java
public class QnACommentDAO {
public SqlSession sqlSession;
public QnACommentDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 QnA댓글 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("comment.deleteMember", memberNumber);
}
}QnAFileDAO.java
public class QnAFileDAO {
public SqlSession sqlSession;
public QnAFileDAO() {
sqlSession= MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 QnAFile 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("qnaFile.deleteMember", memberNumber);
}
}QnADAO
public class QnADAO {
public SqlSession sqlSession;
public QnADAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 QnA삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("qna.deleteMember", memberNumber);
}
}LikesDAO.java
public class LikesDAO {
public SqlSession sqlSession;
public LikesDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 좋아요 삭제
public void deleteMemeber(int memberNumber) {
sqlSession.delete("likes.deleteMember", memberNumber);
}
}CommunityCommentDAO.java
public class CommunityCommentDAO {
public SqlSession sqlSession;
public CommunityCommentDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 커뮤니티 댓글 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("communityComment.deleteMember", memberNumber);
}
public void commenteAllDelete(int memberNumber) {
sqlSession.delete("communityComment.commentAllDelete", memberNumber);
}
}CommunityFileDAO.java
public class CommunityFileDAO {
public SqlSession sqlSession;
public CommunityFileDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 커뮤니티파일 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("communityFile.deleteMember", memberNumber);
}
}CommunityDAO.java
public class CommunityDAO {
public SqlSession sqlSession;
public CommunityDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 커뮤니티 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("community.deleteMember", memberNumber);
}
}FollowsDAO.java
public class FollowsDAO {
public SqlSession sqlSession;
public FollowsDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 팔로우 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("follows.deleteMember", memberNumber);
}
}CreationCommentDAO.java
public class CreationCommentDAO {
public SqlSession sqlSession;
public CreationCommentDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 창작물 댓글 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("creationComment.deleteMember", memberNumber);
}
public void commenteAllDelete(int memberNumber) {
sqlSession.delete("creationComment.commentAllDelete", memberNumber);
}CreationFileDAO.java
public class CreationsFileDAO {
public SqlSession sqlSession;
public CreationsFileDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원 탈퇴 시 회원이 올린 창작물 파일 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("creationsfile.deleteMember", memberNumber);
}
}CreationsDAO.java
public class CreationsDAO {
public SqlSession sqlSession;
public CreationsDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴 시 창작물 삭제
public void deleteMember(int memberNumber) {
sqlSession.delete("creations.delete", memberNumber);
}
}MemberDAO
public class MemberDAO {
public SqlSession sqlSession;
public MemberDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// 회원탈퇴하기
public void deleteMember(int memberNumber) {
sqlSession.delete("member.deleteMember", memberNumber);
}
}QnACommentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="comment">
<!-- 회원탈퇴 시 QnA댓글 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from qna_comment
where member_number = #{memberNumber};
</delete>
</mapper>QnAFileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="qnaFile">
<!-- 회원탈퇴 시 QnA첨부파일 삭제 -->
<delete id="deleteMember" parameterType="_int" >
delete from qna_file
where qna_number in (select qna_number from qna
where member_number = #{memberNumber})
</delete>
</mapper>QnAMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="qna">
<!-- 회원탈퇴 시 QnA등록글 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from qna
where member_number = #{memberNumber}
</delete>
</mapper>LikesMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="likes">
<!-- 회원탈퇴 시 좋아요 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from likes
where member_number = #{memberNumber}
</delete>
</mapper>CommunityCommentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="communityComment">
<!-- 회원탈퇴 시 커뮤니티댓글 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from community_comment
where member_number = #{memberNumber}
</delete>
<delete id="commentAllDelete" parameterType="_int">
delete cc FROM community_comment cc
inner JOIN community c ON cc.community_number = c.community_number
where c.member_number = #{memberNumber}
</delete>
</mapper>CommunityFileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="communityFile">
<!-- 회원탈퇴 시 커뮤니티파일 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from community_file
where community_number in (select community_number from community
where member_number = #{memberNumber})
</delete>
</mapper>CommunityMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="community">
<!-- 회원탈퇴 시 커뮤니티 글 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from community
where member_number = #{memberNumber}
</delete>
</mapper>FollowsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="follows">
<!-- 회원탈퇴 시 팔로우 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from follows
where follower_number = #{memberNumber} or followee_number = #{memberNumber}
</delete>
</mapper>CreationCommentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="creationComment">
<!-- 회원탈퇴 시 창작물 댓글 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from creations_comment
where member_number = #{memberNumber}
</delete>
<delete id="commentAllDelete" parameterType="_int">
delete cc FROM creations_comment cc
inner JOIN creations c ON cc.creation_number = c.creation_number
where c.member_number = #{memberNumber}
</delete>
</mapper>CreationsFileMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="creationsfile">
<!-- 회원탈퇴 시 창작물 파일 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from creations_file f
where f.creation_number in (select c.creation_number from creations c
where member_number = #{memberNumber})
</delete>
</mapper>CreationsMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="creations">
<!-- 회원탈퇴 시 창작물 삭제 -->
<delete id="deleteMember" parameterType="_int">
delete from creations
where member_number = #{memberNumber}
</delete>
</mapper>MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="member">
<!-- 회원탈퇴하기 -->
<delete id="deleteMember" parameterType="_int">
delete from `member`
where
member_number= #{memberNumber};
</delete>
</mapper>마이페이지 - 회원 탈퇴