무작정 개발.Vlog

[JQuery] 세팅 및 jQuery & Ajax를 이용한 텍스트 데이터 전송

by 무작정 개발
반응형
2022.03.15(56일 차_화요일)

이번에는 jQuery & Ajax를 이용해서 텍스트 데이터 전송에 관한 예제를 정리할 것이다.

 

 

jQuery 란?

자바스크립트 언어를 간편하게 사용할 수 있도록 단순화시킨 오픈 소스 자바스크립트 라이브러리이다.

DOM(문서 객체 모델)과 이벤트에 관한 처리를 손쉽게 해 주고, Ajax 응용 프로그램 및 플러그인도 활용 가능해진다

나는 Webcontent폴더 -> data -> 안에 css, js폴더를 만들어서 넣어줬다.

이제 사용할 JSP 페이지에 <script> 태그를 사용해서 src에 경로를 작성하면 사용할 수 있다.

 

ex) <script type="text/javascript" src="<%=cp%>/data/js/jquery-3.1.1.min.js"></script>

 

 


 

XMLHttpRequest 객체 생성

XMLHttpRequest는 이전 글에서도 한번 다룬 내용인데 브라우저마다 객체 생성하는 방법이 다르다.

var xmlHttp;

function createXMLHttpRequest(){
	
	var xmlReq = false;
	
	if(window.XMLHttpRequest){//Non-Microsoft browser
		
		xmlReq = new XMLHttpRequest; //객체생성방법
		
	}else if(window.ActiveXObject){//Microsoft browser
		
		try {//버전 5.0이후
			xmlReq = new ActiveXObject("Msxml2.XMLHTTP");			
		} catch (e) {//버전 5.0이전
			xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
		}
		
	}
	
	return xmlReq;
	
}

 


 

데이터 전송 방법 - (Javascript 사용 예제)

  • Javascript를 이용해서 데이터를 보내는 예제이다.
  • test 1.jsp 에서 test 1_ok.jsp로 데이터를 보냈다가 다시 test 1.jsp로 데이터를 받아 출력

test1.jsp 출력 화면
test1.jsp 출력 화면

 

 test1.jsp - (출력 페이지)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	//test1,test1_ok는 js로 데이터를 받는방법.
	
	//데이터를 받는방법은 js / js + jquery / jquery 3가지 방법이 있음
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript" src="<%=cp%>/data/js/ajaxUtil.js"></script>

<script type="text/javascript">

	function sendIt() {
		
		//XMLHttpRequest 객체 생성을 하는 메서드를 모듈화하여 사용
		xmlHttp = createXMLHttpRequest(); //시작할때 0번
		
		var query = "";
		var su1 = document.getElementById("su1").value;
		var su2 = document.getElementById("su2").value;
		var oper = document.getElementById("oper").value; //3개의 값을 받고
		
		//get 방식 데이터 전송 - 주소를 만들어주고
		query = "test1_ok.jsp?su1=" + su1 + "&su2=" + su2 + "&oper=" + oper;
		
		//이름은 사용자 정의
		//onreadystatechage 메서드
		//서버가 작업을 마치고 클라이언트에게 정보를 돌려줄 때 자동으로 실행할 메서드를 지정
		xmlHttp.onreadystatechange = callback; //callback 함수 밑에 정의
		
		//open(); : 주소를 보내기위해 하는 준비작업
		xmlHttp.open("GET",query,true);// 1번   /get방식으로 query를 보내고 true를 준다 / post방식일때는 false
									   //get방식으로 보낼것인데 쿼리를 위 주소로 보내고 true(비동기방식)값 줌
		
		//send(); : 보내는 명령어
		//POST방식으로 전송 시 send에 전송해야하는 데이터값을 파라미터로 넣어준다.
		xmlHttp.send(null); // 2번 비동기 방식으로 보낸다.
		
		//3번은 서버에서 실행되고 될때마다 3번을 보내주고 다 되면 4번을 보내준다
		
	}
	//데이터를 처리해서 받는데가 콜백
	//콜백함수 : 서버에 던져서 돌아오면 무조건 멧드를 받아야됨.문법적으로 콜백함수라고함
	function callback() {
		
		if(xmlHttp.readyState==4){ //서버 작업이 완료되면 4
			if(xmlHttp.status==200) { //작업이 정상적으로 됬으면 200 아니면 404
				
				printData();
				
			}
		}
		
	}
	
	function printData() {
		//넘어오는 xml파일의 "root"를 읽어내서 result에 담는다.
		var result = xmlHttp.responseXML.getElementsByTagName("root")[0];
		//돌려주는 데이터가 xml이다.xml받을 준비를 해놓음
		
		//resultDIV에 뿌릴려면 객체화 시켜야한다
		var out = document.getElementById("resultDIV");
		
		out.innerHTML ="";
		out.style.display =""; //이미 한번 실행이 됬다면 null로 초기화(실행할때마다 초기화)
		
		var value = result.firstChild.nodeValue; //root 안의 첫번째 차일드의 값 sum을 잃어서 value에 넣음
		
		out.innerHTML = value; //value 값을 HTML화 시켜서 출력한다.
		
	}



</script>

</head>
<body>

<input type="text" id="su1"/>
<select id="oper">
	<option  value="hap">더하기</option>
	<option  value="sub">빼기</option>
	<option  value="mul">곱하기</option>
	<option  value="div">나누기</option>
</select>
<input type="text" id="su2"/>
<input type="button" value=" = " onclick="sendIt();"/>

<div id="resultDIV" style="display: none;"></div> <!-- 여기에 데이터 뿌림 -->

</body>
</html>

 

test 1_ok.jsp - (model를 받아 처리 후 반환해주는 페이지)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	int su1 = Integer.parseInt(request.getParameter("su1"));
	int su2 = Integer.parseInt(request.getParameter("su2"));
	String oper = request.getParameter("oper");
	
	int sum = 0;
	
	if(oper.equals("hap"))
		sum = su1 + su2;
	else if(oper.equals("sub"))
		sum = su1 - su2;
	else if(oper.equals("mul"))
		sum = su1 * su2;
	else if(oper.equals("div"))
		sum = su1 / su2;
	
	//결과를 돌려주기 위해서 XML을 만들어서 데이터를 넣어 보낸다(반환).
	StringBuffer sb = new StringBuffer();
	
	//넘어오는 데이터
	sb.append("<?xml version='1.0' encoding='utf-8'?>\n");//누적
	sb.append("<root>" + sum + "</root>"); //root태그에 묶인 sum값을 test1으로 보낸다

	//만든 XML을 클라이언트한테 돌려준다 / 클라이언트에게 response
	response.setContentType("text/xml;charset=utf-8");
	response.getWriter().write(sb.toString()); //sb에 있는 toString으로 바꿔서 writer를 써서 데이터를 보낸다.
											   //보낸 데이터는 콜백함수가 실행되면서 받는다.
	
%>

 


데이터 전송 방법 - (Ajax + jQuery사용 예제)
  • Ajax + jQuery를 이용해서 데이터를 보내는 예제
  • test2.jsp에서 test2_ok.jsp로 데이터를 보내고, test2_ok.jsp에서 받은 데이터 + 여기에 있는 데이터를 XML형태로  다시 보내고, test2.jsp는 이걸 받을 때 parsing 작업을 함

제목&#44;내용을 입력하고 보내기버튼을 누르면 위의 알림창이 뜬다.
제목,내용을 입력하고 보내기버튼을 누르면 위의 알림창이 뜬다.
알림창이 뜨고 난 후의 test2.jsp 실행 화면
알림창이 뜨고 난 후의 test2.jsp 실행 화면

test2.jsp - (출력 페이지)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	//여기선 js + jquery의 ajax로 데이터 보내는 방법
	// Ajax & jQuery 를 사용해서 데이터 보내는 방법
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript" src="<%=cp%>/data/js/jquery-3.1.1.min.js"></script>

<!-- 데이터를 보내는 곳 -->
<script type="text/javascript">

	$(function(){
		
		$("#sendButton").click(function () {
			
			var params = "subject=" + $("#subject").val() + "&content=" + $("#content").val();
			
			$.ajax({
				
				//jquery는 post방식으로 거의 보낸다
				
				type:"POST",//전송방식
				url:"test2_ok.jsp",//주소
				data:params,//전송 데이터
				dateType:"xml", //돌아오는 데이터 타입(반환값)은 xml
				//갔다가 돌아왔을 때(성공) 실행하는 함수 - (돌아올때는xml데이터가 와서 받아줘야함)
				success:function(args) {
					
					//xml에서 데이터 읽기(parsing 작업 필요)
					$(args).find("status").each(function() { //status해당태그 검색,each는 반복작업명령어 
						
						alert($(this).text());//
					});
					
					var str = "";
					//each로 반복작업명령
					$(args).find("record").each(function() {
						
						//id는 속성이라 attr로 씀
						var id = $(this).attr("id");//레코드에 있는 속성 아이디를 찾아라
						var subject = $(this).find("subject").text(); //subject의 텍스트를 찾아라
						var content = $(this).find("content").text();
						
						str += "id=" + id + 
									",subject=" + subject +
									",content=" + content + "<br/>";
						
					});
					
					$("#resultDIV").html(str);//str를 넣어라
					
					
				},
				//showRequest는 사용자 정의 
				beforeSend:showRequest, //데이터를 보내기전에 무언가를 하는 함수(보내기전에 입력여부 체크)
				//갔다가 돌아왔을 때(실패) 실행하는 함수
				error:function(e) {
					alert(e.responseText);//에러메세지 텍스트로 띄우기
				}
				
			});
			

			
		});
		
	});
	
	//가기 전에 해야하는 작업
	function showRequest() {
		
		var flag = true;
		
		if(!$("#subject").val()) {//subject에 value가 없으면
			alert("제목을 입력하세요!");
			$("#subject").focus();
			return false; //false값을 반환하면 실행하지 않는다. true가 와야 실행	
		}
		
		if(!$("#content").val()) {//subject에 value가 없으면
			alert("내용을 입력하세요!");
			$("#content").focus();
			return false; //false값을 반환하면 실행하지 않는다. true가 와야 실행	
		}
		
		return flag; //flag 안에 true값이 들어가있다 그래서 flag를 반환하면서 실행
					 //true가 return되어야만 sendButton이 클릭되었을 때 함수가 돌아간다.
		
	}
	
	

</script>

</head>
<body>

제목: <input type="text" id="subject"/><br/>
내용: <input type="text" id="content"/><br/>
<input type="button" id="sendButton" value="보내기"/><br/>

<div id="resultDIV"></div> <!-- 여기에 데이터 뿌림 -->

</body>
</html>

 

 

test2_ok.jsp - (서버의 요청을 받아 응답하는 페이지)

<%@ page contentType="text/xml; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	//넘어오는 값 받는다
	String subject = request.getParameter("subject");
	String content = request.getParameter("content");
	
%>

<!-- 받아낸 값을 xml자체를 넘겨준다 -->

<root>
	<status>권장도서</status>
	<record id="1">
		<subject><%=subject%></subject>
		<content><%=content%></content>
	</record>
	<record id="2">
		<subject>도깨비</subject>
		<content>유인나</content>
	</record>
</root>

 


데이터 전송 방법 - (jQuery사용 예제)

  • jQuery를 이용해서 데이터를 보내는 예제
  • test 3.jsp에서 test 3_ok.jsp로 데이터를 Post 방식으로 보냈다가 다시 받을 땐 파라미터 값을 받아옴

test3.jsp실행 화면
test3.jsp실행 화면

 

test 3.jsp - (데이터 출력 페이지-post방식 )

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	//여기선 jquery로 데이터 넘기는 방법
	
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script src="https://code.jquery.com/jquery-3.6.0.js"></script>

<script type="text/javascript">

$(document).ready(function () { //ready는 DOM이 생성되면 실행
	
	$("#saveButton").click(function () {
		
		//값을 읽어낸다
		var value1 = $("#userId").val();
		var value2 = $("#userPwd").val();
		
		//post방식으로 보냄
		//test_ok.jsp, {userId:value1, userPwd:value2} 보내고,  function(args) 콜백함수
		$.post("test3_ok.jsp", {userId:value1, userPwd:value2}, function (args) {
			
			$("#resultDIV").html(args); //html형태로 args를 뿌려준다.
			
		});
		
	});
	// 지우기 버튼 눌렀을 때
	$("#clearButton").click(function () {
		$("#resultDIV").empty();
	});
	
});

</script>

</head>
<body>

아이디: <input type="text" id="userId"/><br/>
패스워드: <input type="text" id="userPwd"/><br/>

<button id="saveButton">전송</button>
<button id="clearButton">지우기</button>

<br/><br/>

<div id="resultDIV"></div> <!-- 여기에서 데이터 출력 -->

</body>
</html>

 

test 3_ok.jsp - (파라미터 값을 받아오는 페이지)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	String userId = request.getParameter("userId");
	String userPwd = request.getParameter("userPwd");
	
%>

아이디: <%=userId%><br/>
패스워드: <%=userPwd%><br/>

 


 

데이터 전송 방법 - (Ajax + jQuery사용 예제)

  • Ajax + jQuery를 이용해서 데이터를 보내는 예제
  • 데이터를 get방식으로 보냈다가 파라미터 값을 받아온다.

test4.jsp 실행화면
test4.jsp 실행화면

 

test4.jsp - (데이터 출력 페이지 - Post방식)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	//js + ajax로 데이터
	
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script src="https://code.jquery.com/jquery-3.6.0.js"></script>

<script type="text/javascript">

$(document).ready(function () {
	
	$("#saveButton").click(function () {
		
		var params = "userId=" + $("#userId").val() +
					"&userPwd=" + $("#userPwd").val();
		
		$.ajax({
			
			type:"POST",
			url:"test4_ok.jsp",
			data:params,
			success:function(args) {
				$("#resultDIV").html(args);
			},
			beforeSend:showRequest,
			error:function(e) {
				alert(e.responseText); // responseText : 서버응답내용을 나타내는 문자열
			}
		});
			
		
	});
	//함수이름은 사용자 정의
	function showRequest() {
		
		var flag = true;
		
		if(!$("#userId").val()) {
			alert("아이디 입력하세요!");
			$("#userId").focus();
			return false;
		}
		
		if(!$("#userPwd").val()) {
			alert("패스워드 입력하세요!");
			$("#userPwd").focus();
			return false;
		}
		
		return flag;
	}
	
	
	$("#clearButton").click(function () {
		$("#resultDIV").empty();
	});
	
});

</script>

</head>
<body>

아이디: <input type="text" id="userId"/><br/>
패스워드: <input type="text" id="userPwd"/><br/>

<button id="saveButton">전송</button>
<button id="clearButton">지우기</button>

<br/><br/>

<div id="resultDIV"></div> <!-- 여기에서 데이터 출력 -->

</body>
</html>

 

test4_ok.jsp - (파라미터값을 받아오는 페이지)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	String userId = request.getParameter("userId");
	String userPwd = request.getParameter("userPwd");
	
%>

아이디: <%=userId%><br/>
패스워드: <%=userPwd%><br/>

 


 

jQuery + Ajax를 이용하여 JSON 형태의 데이터 전송

  • JSON는 Map방식으로 <Key, Value> 형태로 데이터가 저장된다.

test5.jsp
test5.jsp

 

test5.jsp- (데이터 출력 페이지)

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<title>Insert title here</title>

<script type="text/javascript">

// JSON : 구조화된 텍스트 데이터의 교환을 위한 자바스크립트 표현식
/* json 형식으로 값을 받는 방법이다.  */
	$(function() { //$(document).ready(function ()를 생략해서 이렇게 쓸 수 있음
	
		$("#sendButton").click(function(){
			
			var params = "userId=" + $("#userId").val() +
					"&userPwd=" + $("#userPwd").val();
			
			$.ajax({
			
				type:"POST",
				url:"test5_ok.jsp",
				data:params,
				dataType:"json", // 돌아오는 타입이 json형태
				
				
				success:function(args) { // 성공하면 args에 데이터가 들어옴
				
					var str = "";
				/* 모양을 만듬 */
					for(var i=0; i<args.length;i++) {
						
						str += "id=" + args[i].id;
						str += ",userId=" + args[i].userId;
						str += ",userPwd=" + args[i].userPwd + "<br/>";
						
					}
					
					// 반복문을 통해 어이다가 출력할것인가
					$("#resultDIV").html(str);
					
				},
				// 에러일때 
				error:function(e) {
					alert(e.responseTest);
				}
			});
		});
	});

</script>

</head>
<body>
	아이디: <input type="text" id="userId"/><br/>
	패스워드: <input type="text" id="userPwd"/><br/>
	
	<!-- button이란 태그는 submit기능을 가지고 있다.  -->
	<button id="sendButton">전송</button>
	<br/><br/>
	
	<div id="resultDIV"></div>
</body>
</html>

 

test5_ok.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
	
	
	String userId = request.getParameter("userId");
	String userPwd = request.getParameter("userPwd");
	
	
	String result = "";
	
	for(int i=1;i<=3;i++){ // 데이터는 여러개다를 표현
		
		result += "{\"id\":\"" + i;  // \" 앞과 id뒤 \" 짝  \" 는 " 이됨 
		result += "\",\"userId\":\"" + userId;
		result += "\",\"userPwd\":\"" + userPwd + "\"},";
		
		
		// json형태의 데이터 
		// [
		//  key : value
		// {"id:"1","userId":"suzi","userPwd":"123"}, 똑같은 데이터를 여러개
		// {"id:"1","userId":"suzi","userPwd":"123"}, 똑같은 데이터를 여러개
		// {"id:"1","userId":"suzi","userPwd":"123"},  똑같은 데이터를 여러개
		// ]
	}
	
	
	result = result.substring(0,result.length()-1); // 마지막 , 를 뺌
	result = "[" + result + "]"; // 대괄호가 묶인 데이터가 나옴
	
	out.print(result); 
%>

 

 

이번에 생소한 jQuery + Ajax에 대해 배워서 많이 어려웠다. JS 또한 아직 익숙하지가 않아 좀 더 복습해봐야겠다.

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기