본문 바로가기

콩's EDUCATION/콩's JSP&SERVLET

회원가입시 아이디(id) 중복확인 logic

** DB에 이미 저장된 userinfo를 사용한다.

** userinfo id에는 admin이 적용되었다.

** 결과적으로 admin으로 아이디를 넣고 중복확인을 하면 이미 사용중이라는 메시지가 나온다.

 

<회원가입 예제>

 

 

<logic>

 

join_confirm.jsp 요청

join_confirm.jsp 응답

 

아이디 (        ) (중복확인) -> 이벤트가 발생한다 [위 사진 참조]

 

이벤트가 발생하면 ID체크에서 확인(input객체)하고 XMLHTTP 객체를 생성된다.

그리고 POST, joindo(Servlet)에서 확인하여 비동기 처리한다.

이는 userid와 커맨드 idcheck로 보내는데 이는 servlet으로 이동한다.

 

servlet에서 dopost를 호출하여 command와 idcheck를 한다.

이는 joinDAO로 넘어와 dupIdCheck에서 확인한다.

 

그리고 확인한 결과는 join_confirm.jsp의 resultIdCheck로 이동하고 결과를 호출한다.

 

<덧> 생전 처음보니 어렵네요 로직 그대로 쫒아가는것만 확인.

 

아이디 부분

 

 <tr>
  <th >아이디</th>
  <td ><input type="text" name="userid" id="userid" maxlength=25>&nbsp;
   <a href="javascript:CheckDuplicateID(document.regi_form.userid);">
   <img src="https://user.design.co.kr/images/user/2006/basic/b_con.gif" style="vertical-align:-4px;"><span id="idResult"></span></a>
   <p style="margin:5px 0 0 0;">4~25자의 영문소문자/숫자로 사용할 수 있습니다.</p><input type=hidden name=dupidcheck>
  </td>
 </tr>

 

join_confirm.jsp    

 

 var xhr = null;
 function CheckDuplicateID(uid){  // 중복확인 이벤트발생
  if(window.ActiveXObject){
   try{
    xhr = new ActiveXObject("Msxm12.XMLHttp"); // IE4.0
   }catch(e){
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); // ie5.0,6.0
   }
  }else if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
   }
   xhr.open("POST","join.do", true); // 요청 초기화
   xhr.onreadystatechange = resultIdCheck; // 응답 처리할 콜백함수
   xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 보내는 내용의 타입을 설정한다.
   xhr.send("userid="+uid.value+"&command=idcheck");

// 요청을 서버로 전송(join과 idcheck) joinProcessServlet으로 이동
    }

 

servlet dopost호출

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 response.setContentType("text/html;charset=utf-8");
 
 PrintWriter out = response.getWriter();
 String cmd = request.getParameter("command");
 if(cmd.equals("idcheck")){
  idCheck(request, response);
 }else{
  joinProc(request, response);
 } 
 }

 

dupidCheck에서 확인

 

 public boolean dupIdCheck(String uid){
    // 중복 ID체크 수행 메서드
    boolean success = false;
    Connection con = null;
    PreparedStatement stat = null;
    ResultSet rs = null;
    String sql = "select * from userinfo where userid=?";
    try{
     con = dbCon();
     stat = con.prepareStatement(sql);
     stat.setString(1,uid);
     rs = stat.executeQuery();
     while(rs.next()){
      success = true;
     } // while end
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    dbClose(con,stat,rs);
   }
    return success;
   }

 

resultIdCheck 에서 결과 확인 및 호출

 

  function resultIdCheck(){ // idcheck Ajax 결과 처리
   if(xhr.readyState==4){
    if(xhr.status==200){
     var span = document.getElementById("idResult");
     span.style.color = "blue";
     span.innerHTML = xhr.responseText;
    }
   }
  }