본문 바로가기

웹 - Ajax

웹 - Ajax - 회원목록/가입 예제2(id 체크, 회원 가입)

-> 데이터 추가

 

)insert_form.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>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<style type="text/css">
	#box{
		width:800px;
		margin:auto;
		margin-top: 100px;
	}

	th{
		vertical-align: middle !important;
		text-align: right;
		font-size: 18px; 
	}
	
	#id_msg{
		display: inline-block;
		width: 300px;
		height: 20px;
		margin-left: 10px;
	}
</style>

<!-- 주소 검색 API -->
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>

<script type="text/javascript">

	function check_id(){
		
		// 회원가입 버튼은 비활성화
		// <input id="btn-register" type="button" ... diabled="disabled">
		$("#btn_register").prop("disabled", true);
		
		// 			 document.getElementById("mem_id").value
		let mem_id = $("#mem_id").val();
		if(mem_id.length==0){
			$("#id_msg").html("");
			return;
		}
		if(mem_id.length<3){
			$("#id_msg").html("아이디는 3자리 이상 입력하시오.").css("color","red");
			return;
		}
		
		// 서버에 현재 입력된 ID를 체크요청(jQuery Ajax이용)
		$.ajax({
			url		:	"check_id.do", 		// MemberCheckIdAction
			data	:	{"mem_id":mem_id},	// parameter	=> check_id.do?mem_id=one
			
			dataType:	"json",
			success	:	function(res_data){
				// res_data = {"result":true} or {"result":false}
				if(res_data.result){
					$("#id_msg").html("사용가능한 아이디입니다.").css("color","blue");
					// 가입버튼 활성화
					$("#btn_register").prop("disabled", false);
				} else {
					$("#id_msg").html("이미 사용 중인 아이디입니다.").css("color","orange");
				}
			},
			error	:	function(err){
				alert(err.responseText)
			}
		});		
	} // end:check_id()
	
	function find_addr(){	
		// 주소 검색 api
	    new daum.Postcode({
	        oncomplete: function(data) {
	            // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분입니다.
	            // 예제를 참고하여 다양한 활용법을 확인해 보세요.
	            $("#mem_zipcode").val(data.zonecode); // 우편번호 넣기
	            $("#mem_addr").val(data.address);	  // 주소 넣기
	        }
	    }).open();
	} // end - find_addr()
	
	function send(f){
		
		let mem_name 	= f.mem_name.value.trim();
		let mem_pwd	 	= f.mem_pwd.value.trim();
		let mem_zipcode = f.mem_zipcode.value.trim();
		let mem_addr	= f.mem_addr.value.trim();
		
		if(mem_name=='') {
			alert('이름을 입력하시오.');
			f.mem_name.value = "";
			f.mem_name.focus();
			return;
		}
		if(mem_pwd=='') {
			alert('비밀번호를 입력하시오.');
			f.mem_pwd.value = "";
			f.mem_pwd.focus();
			return;
		}
		if(mem_zipcode=='') {
			alert('우편번호를 입력하시오.');
			f.mem_zipcode.value = "";
			f.mem_zipcode.focus();
			return;
		}
		if(mem_addr=='') {
			alert('주소를 입력하시오.');
			f.mem_addr.value = "";
			f.mem_addr.focus();
			return;
		}
		
		f.action = "insert.do";	// MemberInsertAction
		f.submit();			    // 전송
	} // end - send()
	
</script>

</head>
<body>

<form class="form-inline"> <!--form-inline: 같은 항목을 한줄로 처리해줌 -->
	<div id="box">
		<div class="panel panel-primary">
			<div class="panel-heading"><h4>::::회원가입::::</h4></div>
			<div class="panel-body">
				<table class="table">
					<tr>
						<th>이름</th>
						<td><input style="width:50%;" class="form-control" name="mem_name"></td>
					</tr>
					<tr>
						<th>아이디</th>
						<td>
							<input style="width:50%;" class="form-control" name="mem_id" id="mem_id" 
								   onkeyup="check_id();">
							<span id="id_msg"></span>
						</td>
					</tr>
					<tr>
						<th>비밀번호</th>
						<td><input style="width:50%;" class="form-control" type="password" name="mem_pwd"></td>
					</tr>
					<tr>
						<th>우편번호</th>
						<td>
							<input style="width:50%;" class="form-control" name="mem_zipcode" id="mem_zipcode">
							<input class="btn btn-info" type="button" value="주소검색" onclick="find_addr();">
						</td>
					</tr>
					<tr>
						<th>주소</th>
						<td>
							<input style="width:100%;" class="form-control" name="mem_addr" id="mem_addr">
						</td>
					</tr>
					
					<tr>
						<td colspan="2" align="center">
							<input class="btn btn-success" type="button" value="목록보기"
								   onclick="location.href='list.do'">
							<input id="btn_register" class="btn btn-primary" type="button" value="가입하기" disabled="disabled"
								   onclick="send(this.form);">							
						</td>
					</tr>
				</table>
			</div>
		</div>
	</div>
</form>

</body>
</html>

 

)추가 폼 서블릿

package action.member;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Servlet implementation class MemberInsertFormAction
 */
@WebServlet("/member/insert_form.do")
public class MemberInsertFormAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// Dispatcher형식으로 호출
		String forward_page = "member_insert_form.jsp";
		RequestDispatcher disp = request.getRequestDispatcher(forward_page);
		disp.forward(request, response);

	}

}

 

)아이디 체크 서블릿

package action.member;

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

import dao.MemberDao;
import db.vo.MemberVo;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MemberCheckIdAction
 */
@WebServlet("/member/check_id.do")
public class MemberCheckIdAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// /member/check_id.do?mem_id=one
		
		// 0. 수신인코딩 설정
		request.setCharacterEncoding("utf-8");
		
		// 1. parameter 받기
		String mem_id = request.getParameter("mem_id");
		
		// 2. mem_id에 해당되는 유저정보 검색
		MemberVo vo = MemberDao.getInstance().selectOne(mem_id);
		
		boolean bResult = (vo==null); // vo가 null이면 true(사용가능한 아이디 - 중복되는 데이터가 없다는 뜻)
		
		// 결과전송
		response.setContentType("application/json; charset=utf-8;");
		
		PrintWriter out = response.getWriter();
		
		String json = String.format("{\"result\":%b}", bResult);
		
		out.print(json);
		//response.getWriter.print(json); -> PrintWriter 생성할 필요 x
		

	}

}

 

)insertAction (vo - 생성자 추가,dao - insert 메서드 추가)

package action.member;

import java.io.IOException;

import dao.MemberDao;
import db.vo.MemberVo;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MemberInsertAction
 */
@WebServlet("/member/insert.do")
public class MemberInsertAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//	/member/insert.do?mem_name=박정환&mem_id=asdf&mem_pwd=1234&mem_zipcode=09696&mem_addr=서울시+동작구
		
		// 0.수신인코딩 설정
		request.setCharacterEncoding("utf-8");
		
		// 1.parameter 받기
		String mem_name 	= request.getParameter("mem_name");
		String mem_id 	 	= request.getParameter("mem_id");
		String mem_pwd 	 	= request.getParameter("mem_pwd");
		String mem_zipcode  = request.getParameter("mem_zipcode");
		String mem_addr 	= request.getParameter("mem_addr");
		
		//2.ip받기
		String mem_ip			= request.getRemoteAddr();
		
		// 3. MemberVO 포장
		MemberVo vo = new MemberVo(mem_name, mem_id, mem_pwd, mem_zipcode, mem_addr, mem_ip);
		
		// 4. DB insert
		int res = MemberDao.getInstance().insert(vo);
		
		// 5. 목록보기
		response.sendRedirect("list.do");

	}

}