JSP

🍄 JQuery 아이디 중복 확인하기

보배 진 2025. 11. 25. 16:20

 

 

 

 

아이디 중복 확인

전에 실습했던 코드에서 controller를 제외한 코드를 가져왔다

controller는 Servlet 파일을 생성한 것으로

복사나 붙여넣기를 하면 제대로 동작하지 않는다

 

 

 

NewFile4_ID.jsp 전체코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>아이디 중복 확인 예제</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
<script type="text/javascript">
	$(function(){
		$("#btn").on("click", function(e){ // event의 e
			e.preventDefault(); // 이벤트 버블링 현상 막기
			// 서브밋 강제 제출을 막을 수 있다
			
			let mid = $("#mid").val();
			
			// 유효성 검사
			if(mid.trim() == "") {  
				// 만약에 아무것도 입력을 안했다면
				// trim() : 공백제거
				alert("아이디를 입력해주세요!");
				return;
			}
			
			// 입력을 잘 했으면 ajax 수행
			$.ajax({
				url : "/day037/Test", // 요청내용
				// 프로젝트명이 실제 주소에 들어가기 때문에 프로젝틈 명을 경로에 포함시켜야 한다
				type : "POST", // 어떻게 요청할지
				data : { mid : mid,
					condition : "JOIN" }, // 내가 입력한 id : 내가 입력한 id값
				// 파라미터 이름이 mid, 스크립트 변수명이 mid 15번 라인!
				success : function(result){ // 성공시 수행 메서드
					console.log(result);
					console.log(typeof result);
					
					if(result == 'true'){
						alert("사용가능!")
					} 
					else {
						alert("사용 불가능..")
					}
				},
				error: function(xhr, status, error){ // 실패시 수행 메서드
					console.log(xhr.status); // 상태 코드
					alert('비동기 처리 실패...');
				}
			});
		});
	});	
</script>
</head>
<body>
	<form action="controller.jsp" method="POST">
		<input type="hidden" name="command" value="JOIN">
		<table border="1">
			<tr>
				<td>아이디</td>
				<td><input type="text" id="mid" name="mid" required>
					<button id="btn">중복확인</button>
				</td>
			</tr>
			<tr>
				<td>비밀번호</td>
				<td><input type="password" name="mpw" required></td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name" required></td>
			</tr>
			<tr>
				<td colspan="2" align="right"><input type="submit" value="회원가입"></td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

 

버튼이 어디 구현되어 있느냐에 따라 버블링 현상이 발생하기도 한다

 

🍄 이벤트 버블링(Event Bubbling) 현상

HTML 요소에 이벤트가 발생했을 때, 그 이벤트가 상위 요소로 전파되는 현상을 말해요

즉, 자식 ➡ 부모 ➡ 조상 요소 순으로 이벤트가 전달됨

 

🍄 이벤트 버블링 현상 막기

e.preventDefault( )

 


 

🍄 ajax

웹 페이지를 새로고침하지 않고 서버와 데이터를 주고받는 기술

요즘은 XML보다 JSON을 많이 사용

▪ 비동기 처리 가능 ➡ 페이지 전체 리로드 없이 일부 데이터만 갱신

▪ 서버와 GET, POST 요청 가능                                                        

 

 

 

 

🍄 ajax 기본 문법

$.ajax({
    url: "서버URL",        // 요청할 서버 주소
    type: "GET" | "POST", // 요청 방식 (GET 또는 POST)
    data: { key: value },  // 서버로 보낼 데이터
    dataType: "json",      // 서버가 반환하는 데이터 타입
    success: function(response){
        // 요청 성공 시 처리할 코드
        console.log("성공:", response);
    },
    error: function(xhr, status, error){
        // 요청 실패 시 처리할 코드
        console.log("실패:", status, error);
    }
});

 

 

 

  • url → 요청할 서버 주소
  • type → GET/POST
  • data → 서버로 보낼 데이터
  • dataType 명시하지 않으면 기본은 문자열이 된다.
  • success → 요청 성공 시 실행
  • error → 요청 실패 시 실행

 

 

Test.java (Servlet 파일) 전체코드

package controller;

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

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

import model.dao.MemberDAO;
import model.dto.MemberDTO;

public class Test extends HttpServlet {
    public Test() {
        super();
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("[로그] GET 요청");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("[로그] POST 요청");

        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String condition = request.getParameter("condition");
        String mid = request.getParameter("mid");
        String mpw = request.getParameter("mpw");

        MemberDAO memberDAO = new MemberDAO();
        MemberDTO memberDTO = new MemberDTO();

        PrintWriter out = null;

    	memberDTO.setCondition(request.getParameter("condition"));

        if("JOIN".equals(condition)) { 
            // 아이디 중복 확인
    		memberDTO.setMid(request.getParameter("mid"));		
    		memberDTO = memberDAO.selectOne(memberDTO);
    		boolean flag = memberDTO == null ? true : false;
    		
    		out = response.getWriter();
    		out.print(flag);
        }
        else if("REGISTER".equals(condition)) {
        	
            String name = request.getParameter("name");

            // 1. 중복 체크
            memberDTO.setMid(mid);
            if(memberDAO.selectOne(memberDTO) != null) {
                out.print(false); // 이미 존재하는 아이디
                out.close();
                return;
            }

            // 2. 회원가입
            memberDTO.setMpw(mpw);
            memberDTO.setName(name);

            boolean success = false;
            try {
                success = memberDAO.insert(memberDTO); // insert 후 성공 여부 반환
            } catch(Exception e) {
                e.printStackTrace();
                success = false;
            }

            out.print(success);
        }

        out.close();
    }
}

 

 

 

 

 

 

 

 

 

🍄 ajax  비동기

무언가를 눌렀을 때 -> 깜빡 거림, 화면이동, 서버이동, 페이지 이동 url이 바뀐다

페이지 이동 없이 같은 화면에서 어떤 서비스를 해야할 때

ex)  지도 검색 중 끊김이 없어야 하지만 데이터는 계속 불러와야 한다

이럴 때 비동기를 사용해야 한다

 

비동기처리 = 화면 유지 && 서버가 필요할 때(데이터 DB가 필요할 때)

 

 

 

 

🍄 비동기 AJAX 장점
페이지 새로고침 없이 서버 통신 가능
사용자 경험(UX) 향상
부분적인 데이터 업데이트 가능
서버 응답 지연에도 페이지 멈추지 않음