MyBatis + MVC 실습 (7) : 회원수정/회원탈퇴(소스코드만 정리)

부트캠프(END)/-Web 실습|2022. 8. 12. 11:45

로그인 처리

 

member-mapper.xml

<!-- 로그인 처리(ID 존재여부 확인) -->
  <select id="memberIdCount" resultType="int" parameterType="String">
    SELECT COUNT(*)
    FROM project_member
    WHERE id=#{id}
  </select>
<!-- 로그인 처리(비밀번호 확인) -->
  <select id="memberInfoData" resultType="MemberVO" parameterType="String">
    SELECT pwd, id, name, admin
    FROM project_member
    WHERE id=#{id}
  </select>

 

 

MemberDAO.java(Class)

package doo.doo.dao;
import doo.doo.vo.*;

import java.io.*;
import java.util.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MemberDAO {
  private static SqlSessionFactory ssf;
  static {
    try {
      Reader reader = Resources.getResourceAsReader("Config.xml");
      ssf = new SqlSessionFactoryBuilder().build(reader);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  public static MemberVO isLogin(String id, String pwd) {
    MemberVO vo = new MemberVO();
    SqlSession session = null;
    try {
      session = ssf.openSession();
      int count = session.selectOne("memberIdCount", id);
      if (count == 0) {
        vo.setMsg("NOID");
      } else {
        vo = session.selectOne("memberInfoData", id);
        if (pwd.equals(vo.getPwd())) {
          vo.setMsg("OK");
        } else {
          vo.setMsg("NOPWD");
        }
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      if (session != null)
        session.close();
    }
    return vo;
  }
}

 

 

MemberModel.java(Class)

//화면 출력만 해줌
@RequestMapping("member/login.do")
public String member_login(HttpServletRequest request, HttpServletResponse response) {
  return "../member/login.jsp"; 
  //main에 출력하는거 아님! shadowBox에 올릴것임. -> shadowBox 안에서 처리를 해야 한다.
}

@RequestMapping("member/login_ok.do")
public String member_login_ok(HttpServletRequest request, HttpServletResponse response) {
  //사용자 요청값을 받아온다.
  String id = request.getParameter("id");
  String pwd = request.getParameter("pwd");
  //DAO연동 -> mapper로 SQL 만들어놓고 DAO에서 메서드 처리
  MemberVO vo = MemberDAO.isLogin(id, pwd);
  String result = vo.getMsg();
  if (result.equals("OK")) {
    HttpSession session = request.getSession(); //세션에 저장해야 로그인 유지가 가능함
    session.setAttribute("id", vo.getId());
    session.setAttribute("name", vo.getName());
    session.setAttribute("admin", vo.getAdmin());
  }
  request.setAttribute("result", result);
  return "../member/login_ok.jsp"; //ajax에서 읽어갈것임
}
@RequestMapping("member/logout.do")
public String member_logout(HttpServletRequest request, HttpServletResponse response) {
  HttpSession session = request.getSession();
  session.invalidate(); //session에 저장된 모든 데이터를 지운다.
  return "redirect:../main/main.do";
}

 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Login</title>
  <link href="https://fonts.googleapis.com/css?family=Asap" rel="stylesheet">
  <link rel="stylesheet" href="./style.css">
  <script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
  <script type="text/javascript">
  $(function(){
    $('#logBtn').on("click",function(){
      let id=$('#id').val();
      if(id.trim()==""){
        $('#id').focus();
        return;
      }
      let pwd=$('#pwd').val();
      if(pwd.trim()==""){
        $('#pwd').focus();
        return;
      }
      //서버로 전송
      $.ajax({
        type:'post',
        url:'../member/login_ok.do',
        data:{"id":id,"pwd":pwd},
        success:function(result){
          let res=result.trim();
          if(res==='NOID'){
            //ID가 없습니다.
            alert("ID 업슴!");
            $('#id').val("");
            $('#pwd').val("");
            $('#id').focus();
          }else if(res==='NOPWD'){
            //비밀번호가 틀립니다.
            alert("비번틀림!");
            $('#pwd').val("");
            $('#pwd').focus();
          }else{
            //정상 수행
            parent.location.href="../main/main.do";
          }
        }
      })
    })
  })
  </script>
</head>
<body>
<!-- partial:index.partial.html -->
<form class="login">
  <input type="text" placeholder="ID" id="id">
  <input type="password" placeholder="Password" id="pwd">
  <input type=button value="로그인" id="logBtn" class="button">
</form>
</body>
</html>

 

login_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
${result}

 

 

회원 수정

member-mapper.xml

<!-- 회원 수정-회원 정보 읽기 -->
  <select id="memberDetailData" resultType="MemberVO" parameterType="String">
    SELECT * FROM project_member
    WHERE id=#{id}
  </select>
<!-- 회원 수정 - UPDATE -->
  <update id="memberUpdate" parameterType="MemberVO"> 
    UPDATE project_member SET
    name=#{name}, sex=#{sex}, email=#{email}, addr1=#{addr1}, addr2=#{addr2},
    tel=#{tel}, content=#{content}
    WHERE id = #{id}
  </update>

 

 

 

MemberDAO.java(Class)

//회원수정시 회원상세정보 가져오기
public static MemberVO memberDetailData(String id) {
  MemberVO vo = new MemberVO();
  SqlSession session = null;
  try {
    session = ssf.openSession();
    vo = session.selectOne("memberDetailData", id);
  } catch (Exception ex) {
    ex.printStackTrace();
  } finally {
    if (session != null)
      session.close();
  }
  return vo;
}
//회원수정시 비밀번호 확인 후 업데이트
public static boolean memberUpdate(MemberVO vo) {
  boolean bCheck = false;
  SqlSession session = null;
  try {
    session = ssf.openSession();
    MemberVO pvo = session.selectOne("memberDetailData", vo.getId());
    if (pvo.getPwd().equals(vo.getPwd())) {
      bCheck = true;
      session.update("memberUpdate", vo);
      session.commit();
    } else {
      bCheck = false;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  } finally {
    if (session != null)
      session.close();
  }
  return bCheck;
}

 

MyPageModel.java(Class)

package doo.doo.model;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import doo.doo.dao.MemberDAO;
import doo.doo.vo.MemberVO;

import controller.Controller;
import controller.RequestMapping;

@Controller
public class MyPageModel {
  @RequestMapping("mypage/mypage.do")
  public String mypage_main(HttpServletRequest request, HttpServletResponse response) {
    request.setAttribute("main_jsp", "../mypage/mypage.jsp");
    return "../main/main.jsp";
  }
  @RequestMapping("member/join_update.do")
  public String member_join_update(HttpServletRequest request, HttpServletResponse response) {
    HttpSession session = request.getSession();
    String id = (String) session.getAttribute("id");
    MemberVO vo = MemberDAO.memberDetailData(id);
    String tel = vo.getTel();
    tel = tel.substring(tel.indexOf("-") + 1);
    vo.setTel(tel);
    request.setAttribute("vo", vo);
    request.setAttribute("mypage_jsp", "../member/join_update.jsp");
    request.setAttribute("main_jsp", "../mypage/mypage.jsp");
    return "../main/main.jsp";
  }
  @RequestMapping("member/join_update_ok.do")
  public String member_join_update_ok(HttpServletRequest request, HttpServletResponse response) {
    //사용자 전송값 받기
    try {
      request.setCharacterEncoding("UTF-8");
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    String id = request.getParameter("id");
    String pwd = request.getParameter("pwd");
    String name = request.getParameter("name");
    String sex = request.getParameter("sex");
    //	 		String birthday=request.getParameter("birthday");
    String email = request.getParameter("email");
    String post = request.getParameter("post");
    String addr1 = request.getParameter("addr1");
    String addr2 = request.getParameter("addr2");
    String tel1 = request.getParameter("tel1");
    String tel2 = request.getParameter("tel2");
    String content = request.getParameter("content");

    MemberVO vo = new MemberVO();
    vo.setId(id);
    vo.setPwd(pwd);
    vo.setName(name);
    vo.setSex(sex);
    //	 		vo.setBirthday(birthday);
    vo.setEmail(email);
    vo.setPost(post);
    vo.setAddr1(addr1);
    vo.setAddr2(addr2);
    vo.setTel(tel1 + "-" + tel2);
    vo.setContent(content);

    //수정처리 요청
    boolean bCheck = MemberDAO.memberUpdate(vo);
    if (bCheck == true) {
      HttpSession session = request.getSession();
      session.setAttribute("name", vo.getName());
    }
    request.setAttribute("bCheck", bCheck);
    return "../member/join_update_ok.jsp";
  }
}

 

join_update.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>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script type="text/javascript" src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script type="text/javascript">
$(function(){
  $('#postBtn').click(function(){
    // 우편번호 검색 처리 
    new daum.Postcode({
      oncomplete:function(data)
      {
        $('#post').val(data.zonecode)
        $('#addr1').val(data.address)
      }
    }).open()
  })
  //유효성 검사!
  /*$('#joinBtn').click(function(){
    
  })*/
  $('#eBtn').click(function(){
    let email=$('#email').val();
    if(email.trim()==""){
      $('#email').focus();
      $('#ePrint').text("이메일을 입력하세요~");
      return;
    }
    $.ajax({
      type:'post',
      url:'../member/emailcheck_ok.do',
      data:{"email":email},
      success:function(result){
        console.log(result);
        let count=parseInt(result.trim());
        if(count==0){
          $('#ePrint').text("사용가능한 이메일입니다.");
          $('#email').attr('disable','true');
        }else{
          $('#ePrint').text("사용중인 이메일입니다.");
          $('#email').val("");
          $('#email').focus();
        }
      }
    })
  })
  $('#tBtn').click(function(){
    let tel=$('#tel2').val();
    if(tel.trim()==""){
      $('#tel2').focus();
      $('#tPrint').text("전화번호를 입력하세요.");
      return;
    }
    $.ajax({
      type:'post',
      url:'../member/tel_check.do',
      data:{"tel":"010-"+tel},
      success:function(result){
        console.log(result);
        let count=parseInt(result.trim());
        if(count==0){
          $('#tPrint').text("사용가능한 전화번호입니다.");
          $('#tel').attr('disable','true');
        }else{
          $('#tPrint').text("사용중인 전화번호입니다.");
          $('#tel').val("");
          $('#tel').focus();
        }
      }
    })
  })
  $('#joinBtn').click(function(){
    //체크는 끝났다는 가정 하에 진행
    $('#join_frm').submit();
  })
})
</script>

</head>
<body>
   <h2 class="sectiontitle">회원수정</h2>
   <form method="post" action="../member/join_update_ok.do" name="join_frm" id="join_frm">
    <table class="table">
      <tr>
       <th class="text-right" width=15%>아이디</th>
       <td width=85% class="inline">
         <input type=text name=id id="join_id" size=30 class="input-sm" readonly value="${vo.id}">
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>비밀번호</th>
       <td width=85% class="inline">
         <input type=password name=pwd id=join_pwd size=30 class="input-sm">
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>이름</th>
       <td width=85%>
         <input type=text name=name id=name size=30 class="input-sm" value="${vo.name }">
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>성별</th>
       <td width=85% class="inline">
         <input type=radio value="남자" name=sex ${vo.sex=='남자'?"checked":"" }>남자
         <input type=radio value="남자" name=sex ${vo.sex=='여자'?"checked":"" }>여자
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>이메일</th>
       <td width=85% class="inline">
         <input type=text name=email id=email size=70 class="input-sm" value="${vo.email }">
         <input type=button id="eBtn" class="btn btn-sm btn-success" value="이메일 확인">
         &nbsp;<span style="color:blue;" id="ePrint"></span>
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>우편번호</th>
       <td width=85% class='inline'>
         <input type=text name=post id=post size=30 class="input-sm" readonly value=${vo.post }>
         <input type=button id="postBtn" value="우편번호찾기"
          class="btn btn-sm btn-danger">
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>주소</th>
       <td width=85%>
         <input type=text name=addr1 id=addr1 size=95 class="input-sm" readonly value=${vo.addr1 }>
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>상세주소</th>
       <td width=85%>
         <input type=text name=addr2 id=addr2 size=95 class="input-sm" value=${vo.addr2 }>
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>전화번호</th>
       <td width=85% class="inline">
         <input type=text name=tel1 id=tel1 size=15 class="input-sm" value="010">
         <input type=text name=tel2 id=tel2 size=30 class="input-sm" value=${vo.tel }>
         <input type=button id="tBtn" class="btn btn-sm btn-info" value="전화 확인">
         &nbsp;<span style="color:blue;" id="tPrint"></span>
       </td>
      </tr>
      <tr>
       <th class="text-right" width=15%>소개</th>
       <td width=85%>
         <textarea rows="10" cols="100" id="content" name="content">${vo.content }</textarea>
       </td>
      </tr>
      <tr>
        <td colspan="2" class="text-center">
         <input type=button class="btn btn-sm btn-primary" value="회원수정" id="joinBtn">
         <input type=button class="btn btn-sm btn-danger" value="취소" onclick="javascript:history.back()">
        </td>
      </tr>
    </table>
    </form>
</body>
</html>

join_update_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
  <c:when test="${bCheck==true }">
    <c:redirect url="../mypage/mypage.do"/>
  </c:when>
  <c:otherwise>
    <script>
      alert("비밀번호가 틀립니다");
      history.back();
    </script>
  </c:otherwise>
</c:choose>

 

 

회원 탈퇴

member-mapper.xml

<!-- 회원 탈퇴 -->
  <delete id="memberDelete" parameterType="String">
    DELETE FROM project_member
    WHERE id=#{id}
  </delete>

 

MemberDAO.java(Class)

//회원탈퇴
public static boolean memberDelete(String id, String pwd) {
  boolean bCheck = false;
  SqlSession session = null;
  try {
    session = ssf.openSession();
    MemberVO pvo = session.selectOne("memberInfoData", id);
    if (pvo.getPwd().equals(pwd)) {
      bCheck = true;
      session.delete("memberDelete", id);
      session.commit();
    } else {
      bCheck = false;
    }
  } catch (Exception ex) {
    ex.printStackTrace();
  } finally {
    if (session != null)
      session.close();
  }
  return bCheck;
}

MyPageModel.java(Class)

@RequestMapping("member/join_delete.do")
public String member_join_delete(HttpServletRequest request, HttpServletResponse response) {

  request.setAttribute("mypage_jsp", "../member/join_delete.jsp");
  request.setAttribute("main_jsp", "../mypage/mypage.jsp");
  return "../main/main.jsp";
}

@RequestMapping("member/join_delete_ok.do")
public String member_join_delete_ok(HttpServletRequest request, HttpServletResponse response) {
  HttpSession session = request.getSession();
  String id = (String) session.getAttribute("id");
  String pwd = request.getParameter("pwd");

  boolean bCheck = MemberDAO.memberDelete(id, pwd);
  if (bCheck == true) {
    session.invalidate(); //로그아웃처리
  }
  request.setAttribute("bCheck", bCheck);
  return "../member/join_delete_ok.jsp";
}

 

join_delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.t{
  width:350px;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
<script type="text/javascript">
$(function(){
  $('#delBtn').click(function(){
    let pwd = $('#join_pwd').val();
    if(pwd.trim()==""){
      $('#join_pwd').focus();
      return;
    }
    $('#join_frm').submit();
  })
})
</script>
</head>
<body>
 <h2 class="sectiontitle">회원수정</h2>
   <form method="post" action="../member/join_delete_ok.do" name="join_frm" id="join_frm">
    <table class="table t">
      <tr>
       <th class="text-right" width=15%>비밀번호</th>
       <td width=85% class="text-center">
         <input type=password name=pwd id="join_pwd" size=30 class="input-sm">
       </td>
      </tr>
      <tr>
        <td colspan="2" class="text-center">
          <input type="button" value="회원탈퇴" class="btn btn-sm btn-primary" id="delBtn">
          <input type="button" value="취소" class="btn btn-sm btn-danger" onclick="javscript:history.back()">
        </td>
      </tr>
    </table>
  </form>
</body>
</html>

 

join_delete_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
  <c:when test="${bCheck==true }">
    <c:redirect url="../main/main.do"/>
  </c:when>
  <c:otherwise>
    <script>
      alert("비밀번호가 틀립니다");
      history.back();
    </script>
  </c:otherwise>
</c:choose>

댓글()