웹 개발 기초/자바 웹을 다루는 기술

제이쿼리 Ajax ID 중복 여부 확인하기

sungw00 2023. 3. 9. 10:15
728x90

Ajax를 이용해 회원 가입 시 사용자 ID 중복 여부를 판별하는 예제

 

1. ajax3.html 파일 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 중복 체크</title>
<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
	function fn_process() {
		var _id = $("#t_id").val(); <!-- 텍스트 박스에 입력한 ID를 가져옴 -->
		if (_id == '') {
			alert("ID를 입력하세요."); <!-- ID를 입력하지 않으면 오류 메시지를 출력 -->
			return;
		}
		$.ajax({
			type: "post",
			async: true,
			url: "http://localhost:8090/pro16/mem",
			dataType: "text",
			data: { id: _id}, <!-- ID를 서블릿으로 전송 -->
			success: function (data, textStatus) {
            	 <!-- 서버에서 전송된 결과에 따라 메시지를 표시 -->
				if (data == 'usable') {
					$('#message').text("사용할 수 있는 ID입니다.");
					$('#btn_duplicate').prop("disabled", true); <!-- 사용할 수 있는 ID면 버튼을 비활성화 시킴 -->
				} else {
					$('#message').text("사용할 수 없는 ID입니다.");
				}
			},
			error:function(data,textStatus) {
				alert("에러가 발생했습니다."); 
			},
			complete:function(data,textStatus) {
				// alert("작업을 완료했습니다."); 
			}
		}); // end ajax
	}
</script>
</head>
<body>
	<input type="text" id="t_id" />
	<input type="button" id="btn_duplicate" onClick="fn_process()" value="ID 중복체크하기" /><br><br>
	<div id="message"></div> <!-- 결과를 표시 -->
</body>
</html>

 

2. MemberServlet.java 서블릿 파일 작성

package sec02.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/mem")
public class MemberServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter writer = response.getWriter();
		String id = (String)request.getParameter("id");
		System.out.println("id = " + id);
		MemberDAO memberDAO=new MemberDAO();
		boolean overlappedID=memberDAO.overlappedID(id); // ID 중복 여부를 체크
		
        // 결과를 메시지로 전송
		if (overlappedID==true) {
			writer.print("not_usable");
		} else {
			writer.print("usable");
		}
	}
}

클라이언트에서 Ajax로 전송된 ID를 받아 MemberDAO의 overlappedID( ) 메서드로 전달하고, 그 결과를 이용해 클라이언트에게 다른 메시지를 전달

 

3. MemberDAO.java 클래스 파일 작성

package sec02.ex01;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class MemberDAO {
	private Connection con;
	private PreparedStatement pstmt;
	private DataSource dataFactory;
	
	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context)ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public boolean overlappedID(String id) {
		boolean result = false;
		try {
			con = dataFactory.getConnection();
			String query = "select decode(count(*),1,'true','false') as result from t_member"; // 오라클의 decode() 함수를 이용해 ID가 존재하면 true, 존재하지 않으면 false를 문자열로 조회
			query += " where id=?";
			System.out.println("prepareStatement: " + query);
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			result = Boolean.parseBoolean(rs.getString("result")); // 문자열을 불(Boolean) 자료형으로 변환
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}

서블릿에서 전달된 ID로 SQL문의 조건식에 설정한 후 ID에 대한 회원 정보를 조회하여 그 결과를 true 또는 false로 반환

 

4. 데이터베이스에서 현재 등록된 아이디 확인

5. http://localhost:8090/pro16/test03/ajax3.html 요청 후 중복되는 아이디는 사용이 불가능하다고 표시된다.

6. 반면에 사용이 가능하다면 사용이 가능하다는 메시지와 함께 버튼이 비활성화된다.

728x90