03_Spring_Mybatis(ajax)

2022. 10. 11. 16:32코딩/FRAMEWORK

joinFrm

<%@ 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>
<!-- 아작스를 사용하기위해 등록 -->
<script src="https://code.jquery.com/jquery-3.6.1.js"></script>
</head>
<body>
	<form action="/join.do" method="post">
		<fieldset>
			<legend>회원가입</legend>
			아이디 : <input type="text" name="memberId"><span id="idChk"></span><br>
			비밀번호 : <input type="password" name="memberPw"><br>
			이름 : <input type="text" name="memberName"><br>
			전화번호 : <input type="text" name="phone"><br>
			이메일 : <input type="text" name="email"><br>
			<input type="submit" value="회원가입">
		</fieldset>
	</form>
	<a href="/">메인으로 돌아가기</a>
	<script>
		$("[name=memberId]").on("change",function(){
			const memberId = $(this).val();
			$.ajax({
				url : "/idCheck.do",
				data : {memberId : memberId},
				success : function(data){
					console.log(data);
					if(data == "0"){
						$("#idChk").text("사용 가능한 아이디 입니다.");
						$("#idChk").css("color","green");
					}else{
						$("#idChk").text("사용 불 가능한 아이디 입니다.");
						$("#idChk").css("color","red");
					}
				}
			});
		});
	</script>
</body>
</html>

기존의 ajax쓰는 방식과 거의 다를게 없다

다만 url에 들어간 주소로 servlet을 만들었었는데

지금의 방식으로는 controller에 작성을 하면된다.

 

컨트롤러에서 

//오직 데이터만을 넘겨주겠다는 명령어 @ResponseBody(비동기요청, 순수하게 데이터만 전송)
	@ResponseBody
	@RequestMapping(value="/idCheck.do")
	public String idCheck(Member m) {
		Member member = service.selectOneMember(m);
		if(member == null) {
			//사용 가능
			return "0";
		}else {
			//사용 불가능
			return "1";
		}
	}

 

return 에서 주소값을 넘겨 주기때문에

@ResponseBody를 사용하여 비동기요청,순수하게 주소이동이아닌 데이터를 넘기겠다고 알려야한다.

 

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.1.js"></script>
</head>
<body>
	<h1>03_Spring_Mybatis</h1>
	<c:choose>
		<c:when test="${empty sessionScope.m }">
			<form action="/login.do" method="post">
				<fieldset>
					<legend>로그인</legend>
					아이디 : <input type="text" name="memberId"><br>
					비밀번호 : <input type="password" name="memberPw"><br>
					<input type="submit" value="로그인">
				</fieldset>
			</form>
			<a href="/joinFrm.do">회원가입</a>
			<form action="/searchMemberId.do">
				아이디 : <input type="text" name="memberId">
				<input type="submit" value="조회">
			</form>
		</c:when>
		
		<c:otherwise>
			<!-- sessionScope을 사용 안해도 출력은 되지만
			구분이 되지 않기 때문에 세션인지 아닌지 구분하기위해 적어놓는다. -->
			<h2>[${sessionScope.m.memberName }]</h2>
			<h3><a href="/boardList.do?reqPage=1">게시판</a></h3>
			<h3><a href="/selectAllMember.do">전체회원조회</a></h3>
			<h3><a href="/logout.do">로그아웃</a></h3>
			
			<h3><a href="/mypage.do">마이페이지</a></h3>
			<h3><a href="/deleteMember.do">회원탈퇴</a></h3>
			<form action="/searchMemberName.do">
				이름:<input type="text" name="memberName">
				<input type="submit" value="조회">
			</form>
			<form action="/searchMember1.do" method="post">
				<select name="type">
					<option value="id">아이디</option>
					<option value="name">이름</option>
				</select>
				<input type="text" name="keyword">
				<input type="submit" name="검색">
			</form>
			<hr>
			<p>아이디만 입력하고 검색하는 경우 아이디로 조회,
			이름만 입력하고 검색하는경우 이름으로조회,
			둘다입력하고 검색하는 경우 두개 and로 조회
			<h3>아이디 or 이름으로 검색</h3>
			<form action="/searchMember2.do">
				아이디 : <input type="text" name="memberId"><br>
				이름 : <input type="text" name="memberName"><br>
				<input type="submit" value="검색">
			</form>
			<h3><a href="/idList.do">전체회원 아이디 목록</a></h3>
			<h3><a href="/searchMember4.do">회원 조회4</a></h3>
		</c:otherwise>
	</c:choose>
	<button id="allMemberAjax">전체회원조회(AJAX)</button>
	<div id="ajaxResult"></div>
	
	<script>
		$("#allMemberAjax").on("click",function(){
			$.ajax({
				url : "/ajaxAllMember.do",
				success : function(data){
					const table = $("<table>");
					const titleTr = $("<tr>");
					//th태그로 동작하라는 의미로 html로 넣어줌
					titleTr.html("<th>번호</th><th>아이디</th><th>이름</th><th>전화번호</th>")
					table.append(titleTr);
					for(let i=0;i<data.length;i++){
						const tr = $("<tr>");
						tr.append("<td>"+data[i].memberNo+"</td>");
						tr.append("<td>"+data[i].memberId+"</td>");
						tr.append("<td>"+data[i].memberName+"</td>");
						tr.append("<td>"+data[i].phone+"</td>");
						table.append(tr);
					}
					$("#ajaxResult").html(table)
				}
			});
		});
	</script>
</body>
</html>

ajaxAllMember

@ResponseBody
	@RequestMapping(value="/ajaxAllMember.do",produces = "application/json;charset=utf-8")
	public String ajaxAllMember() {
		//produces = "application/json;charset=uft-8" : 이거 객체 타입이고 한글은 utf-8로 인코딩해서 보내준다는 의미
		ArrayList<Member> list = service.selectAllMember();
		
		Gson gson = new Gson();
		//착각하지말것 json은 객체타입이 아닌 문자열임
		//그런고로 String 타입으로 받음
		String result = gson.toJson(list);
		System.out.println(result);
		return result;
	}

Gson을 사용하기 위해서는 메이븐 등록을 해야한다.

여기서 Gson은 객체타입으로 넘겨주는 것이 아닌 기~~다란 문자열 로 넘겨주는것이기 때문에 String 문자열 타입으로 받아야 한다.

'코딩 > FRAMEWORK' 카테고리의 다른 글

04_Spring_AOP  (0) 2022.10.11
03_Spring_Mybatis_member_map(trim,collection,CDATA)  (0) 2022.10.09
Mybatis  (0) 2022.10.06
Spring[CRUD] 라이브러리 세팅  (0) 2022.09.30
SPRING [CRUD]  (0) 2022.09.29