JavaScript È°¿ëÆÁ
2018.09.30 / 22:45

¿äû ÆĶó¹ÌÅ͸¦ ¼­¹ö·Î º¸³»±â

GAScripter
Ãßõ ¼ö 219

Áö±Ý±îÁö´Â ajax¸¦ ÀÌ¿ëÇÏ¿© ¿äûÀ» ¼­¹ö·Î º¸³»´Â ¹æ¹ý°ú ¼­¹ö·ÎºÎÅÍ ¹ÞÀº °á°ú Á¤º¸¸¦ ÆĽÌÇؼ­ ó¸®ÇÏ
´Â ¿©·¯ Ư¡µé¿¡ ´ëÇؼ­ »ìÆ캸¾Ò´Ù. ÇÏÁö¸¸ À̰͸¸À¸·Î´Â ºÎÁ·ÇÏ´Ù. xml ÀÇ °íÁ¤µÈ Á¤º¸¸¦ ´Ù·ç´Â °ÍÀÌ
½ÇÁõ³ªÁö ¾Ê´Â°¡? ¿äûÀ» º¸³¾¶§ ƯÁ¤ ÆĶó¹ÌÅ͸¦ ½Ç¾î¼­ ¼­¹ö¿¡ º¸³»°í, ¼­¹ö´Â ¿äûÁ¤º¸¸¦ ¹ÙÅÁÀ¸·Î Ư
È­µÈ ÀÀ´äÁ¤º¸¸¦ º¸³»¾ß¸¸ ¾µ¸¸ÇØ Áø´Ù.
XMLHttpRequest(XHR) Àº °íÀüÀû À¥ÀÇ GET/POST ¹æ½Ä°ú Èí»çÇÏ°Ô µ¿ÀÛÇÑ´Ù. GET ¹æ½ÄÀº name=value
½ÖÀÇ ÆĶó¸¶Å͸¦ url ¿¡ ½Ç¾î¼­ ¼­¹ö·Î Àü¼ÛÇÑ´Ù. ¹°·Ð name=value ½ÖÀº ¸®¼Ò½º url ÀÇ ³¡À» ÀǹÌÇÏ´Â ?
ÀÌÈÄ¿¡ ±¸ºÐÀÚ(&) ¸¦ »çÀÌ»çÀÌ¿¡ ³¢°í ÁÖ¿í ºÙ´Â´Ù.
POST ¹æ½ÄÀº GET ¹æ½Ä°ú ¸¶Âù°¡Áö·Î name=value ½ÖÀÇ ÇüÅ·Πµ¥ÀÌÅ͸¦ Àü´ÞÇÑ´Ù. ¹°·Ð °°Àº ±¸ºÐÀÚ
(&)¸¦ »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ POST ¹æ½ÄÀº Æû ¿ä¼ÒÀÇ µ¥ÀÌÅ͸¦ ÀÎÄÚµùÇÏ¿© Http Request °´Ã¼ÀÇ body ¿¡ Àú
ÀåÇؼ­ º¸³½´Ù.
¶Ç ´Ù¸¥ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù¸é ¼­¹ö·Î º¸³¾ ¼ö ÀÖ´Â ¿äûÁ¤º¸ÀÇ Å©±âÀε¥, GET ¹æ½ÄÀ¸·Î´Â
name1=value1&name2=value2&name3=value3... ÀÌ·± ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡, ºê¶ó¿ìÀú¸¶´Ù Â÷ÀÌ°¡ ÀÖÁö¸¸, ´ë
·« 2000 byte ÀÌ»óÀÌ¸é ºÒ°¡´ÉÇÏ´Ù. ºÒ°¡´ÉÇÏ´Ù´Â Àǹ̰¡ ¹«¾ùÀÌ³Ä ÇÏ¸é ºê¶ó¿ìÀú´Â ¿äûÁ¤º¸¸¦ º¸³»·Á°í
½Ãµµ´Â ÇÏÁö¸¸ 󸮰¡ ¾ÈµÇ±â ¶§¹®¿¡ ÇÁ·¯¼¼½º´Â Áß´ÜµÇ°í ¸¸´Ù. µû¶ó¼­ ¼­¹ö·Î º¸³»´Â ÆĶó¹ÌÅÍ°¡ ¸¹À»
¶§´Â POST ¹æ½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î µ¥ÀÌÅ͸¦ fetch(°Ë»ö) ÇÒ¶§´Â GET ¹æ½ÄÀ» »ç¿ëÇÏ°í ±× ÀÌ
¿ÜÀÇ ÀÛ¾÷(Ãß°¡, ¼öÁ¤, »èÁ¦)¿¡´Â POST ¹æ½ÄÀ» ÁÖ·Î »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Ŭ¸¯Çؼ­ ÇöÀç ÀÌ ±ÛÀ» Àаí ÀÖ
´Â °æ¿ì´Â GET ¹æ½ÄÀÌ »ç¿ëµÇ¾úÀ» °ÍÀÌ°í, ÀÌ ±ÛÀ» ¼öÁ¤ÇÒ¶§´Â POST ¹æ½ÄÀÌ »ç¿ëµÉ °ÍÀÌ´Ù.
Ajax¿Í °ü·ÃµÈ Â÷ÀÌÁ¡À̶ó¸é GET ¹æ½ÄÀº ÆĶó¹ÌÅÍ°¡ ÀÎÄÚµùµÇ¾î url ¿¡ ºÙ¾î°¡±â ¶§¹®¿¡ ÇØ´ç url À» Åë
°·Î Àç»ç¿ë(bookmark) °¡´ÉÇÏÁö¸¸ ajax Ư¼º»ó ÀÌ·± ºÏ¸¶Å· ±â´ÉÀº ºÒ°¡´É ÇÏ´Ù. HTML Æû ¿ä¼Ò¿¡´Â
method ¼Ó¼ºÀÌ Àִµ¥ °³¹ßÀÚ´Â GET ¶Ç´Â POST ¹æ½ÄÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ¿äû µ¥ÀÌÅ͵éÀº ¼­¹ö·Î
submit µÉ¶§ method¼Ó¼º¿¡ ¾Ë¸Âµµ·Ï ÀÚµ¿À¸·Î ÀÎÄÚµùµÇÁö¸¸ XHR °´Ã¼´Â ÀÌ·± ³»Àå ¾Ë°í¸®ÁòÀÌ ¾ø±â ¶§
¹®¿¡ °³¹ßÀÚ°¡ Äõ¸® ½ºÆ®¸µÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù. Äõ¸® ½ºÆ®¸µÀ» ÀÛ¼ºÇÏ´Â ¹æ¹ýÀº GET ¶Ç´Â POST ¹æ½Ä¿¡ »ó
°ü¾øÀÌ µ¿ÀÏÇÏ´Ù. À¯ÀÏÇÑ Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù¸é GET ¹æ½ÄÀÇ Äõ¸® ½ºÆ®¸µÀº ¿äû url ¿¡ ºÙ¾î¼­ ¼­¹ö·Î Àü¼ÛµÇ
Áö¸¸ POST ¹æ½ÄÀÇ Äõ¸® ½ºÆ®¸µÀº XHR °´Ã¼ÀÇ send(Äõ¸® ½ºÆ®¸µ) ¸Þ¼Òµå°¡ È£ÃâµÉ¶§ ÆĶó¹ÌÅÍ·Î Àü¼ÛµÈ
´Ù. »ùÇÃÀ» »ìÆ캸¸é¼­ ajax ¿¡¼­ GET ¹× POST ¹æ½ÄÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ¾Ë¾Æº¸ÀÚ. À̹ø¿¡´Â °á°úÈ­¸é
À» ¸ÕÀú ¼Ò°³ÇÑ´Ù.
<3-11 GET/POST ¹æ½Ä »ùÇà ȭ¸é>
À§ ±×¸² 3-11 Àº ºê¶ó¿ìÀú¿¡¼­ First name, Middle name, Birthday ¸¦ ÀÔ·ÂÇÑ ÈÄ Send parameters
using GET ¹öÆ° ȤÀº Send parameters using POST ¹öÆ°À» ´­·¶À» ¶§ÀÇ °á°ú°¡ ¹Ù·Î ¾Æ·¡ ºÎºÐ¿¡ Ç¥½Ã
µÇ´Â ÇüÅÂÀÇ ´Ü¼øÇÑ ¿¹Á¦ÀÌ´Ù. À§ »ùÇÃÀ» ½ÇÇà½ÃÄÑ º¸±â À§Çؼ­´Â getAndPostExample.html °ú ¼­¹ö ÇÁ·Î
±×·¥ÀÎ GetAndPostExample.java °¡ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ À̹ø ¿¹Á¦ÀÇ ÁÖ¿ä ÇÙ½ÉÀº ¼­¹ö ÇÁ·Î±×·¥ÀÌ ¾Æ´Ï´Ù.
XHR °´Ã¼°¡ GET/POST ¹æ½ÄÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¸¦ ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. Ŭ¶óÀ̾ðÆ® ¹× ¼­¹ö ÇÁ·Î
±×·¥ Äڵ带 ±â¼úÇÑ ÈÄ XHR ÀÇ ÁÖ¿äÄڵ忡 ´ëÇؼ­ ¼³¸íÀ» ÇÏ°Ú´Ù.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sending Request Data Using GET and POST</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function createQueryString() {
var firstName = document.getElementById("firstName").value;
var middleName = document.getElementById("middleName").value;
var birthday = document.getElementById("birthday").value;
var queryString = "firstName=" + firstName + "&middleName=" + middleName
+ "&birthday=" + birthday;
return queryString;
}
function doRequestUsingGET() {
createXMLHttpRequest();
var queryString = "GetAndPostExample?";
queryString = queryString + createQueryString()
+ "&timeStamp=" + new Date().getTime();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", queryString, true);
xmlHttp.send(null);
}
function doRequestUsingPOST() {
createXMLHttpRequest();
var url = "GetAndPostExample?timeStamp=" + new Date().getTime();
var queryString = createQueryString();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(queryString);
}
function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
parseResults();
}
}
}
function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}
var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}
</script>
</head>
<body>
<h1>Enter your first name, middle name, and birthday:</h1>
<table>
<tbody>
<tr>
<td>First name:</td>
<td><input type="text" id="firstName"/>
</tr>
<tr>
<td>Middle name:</td>
<td><input type="text" id="middleName"/>
</tr>
<tr>
<td>Birthday:</td>
<td><input type="text" id="birthday"/>
</tr>
</tbody>
</table>
<form action="#">
<input type="button" value="Send parameters using GET" onclick="doRequestUsingGET();"/>
<br/><br/>
<input type="button" value="Send parameters using POST"
onclick="doRequestUsingPOST();"/>
</form>
<br/>
<h2>Server Response:</h2>
<div id="serverResponse"></div>
</body>
</html>
<3-12 getAndPostExample.html ÀÇ Àüü ¼Ò½º ÄÚµå>
package ajaxbook.chap3;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GetAndPostExample extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
protected void processRequest(HttpServletRequest request,
HttpServletResponse response, String method)
throws ServletException, IOException {
//Set content type of the response to text/xml
response.setContentType("text/xml");
//Get the user's input
String firstName = request.getParameter("firstName");
String middleName = request.getParameter("middleName");
String birthday = request.getParameter("birthday");
//Create the response text
String responseText = "Hello " + firstName + " " + middleName
+ ". Your birthday is " + birthday + "."
+ " [Method: " + method + "]";
//Write the response back to the browser
PrintWriter out = response.getWriter();
out.println(responseText);
//Close the writer
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Process the request in method processRequest
processRequest(request, response, "GET");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Process the request in method processRequest
processRequest(request, response, "POST");
}
}
<3-13 GetAndPostExample.java ÀÇ Àüü ¼Ò½º ÄÚµå>
3-12 ÀÇ »ùÇà ÄÚµå´Â ÀÌÀü ¿¹Á¦¿Í ºñ±³ÇØ ºÃÀ»¶§ Å©°Ô ¾î·Á¿î ºÎºÐÀº ¾øÀ» °ÍÀÌ´Ù. 3-13 ÀÇ ÇÁ·Î±×·¥Àº
´Ü¼øÇÑ ¿¡ÄÚ¼º ¹®ÀÚ¿­À» »ý¼ºÇؼ­ ´Ù½Ã Ŭ¶óÀ̾ðÆ®·Î º¸³»´Â °ÍÀ̹ǷΠƯº°ÇÑ ¼³¸íÀº ÇÊ¿äÇÏÁö ¾ÊÀ» µí ½Í
´Ù. À̹ø ¿¹Á¦ÀÇ ÇÙ½ÉÀº ajax ¿¡¼­ GET ¹× POST ¹æ½ÄÀ¸·Î ¼­¹ö¿¡ ÆĶó¹ÌÅ͸¦ º¸³»´Â ¹æ¹ýÀÌ´Ù.
function createQueryString() {
var firstName = document.getElementById("firstName").value;
var middleName = document.getElementById("middleName").value;
var birthday = document.getElementById("birthday").value;
var queryString = "firstName=" + firstName + "&middleName=" + middleName
+ "&birthday=" + birthday;
return queryString;
}
¸ÕÀú À§ ÄÚµå´Â GET ¹× POST ¹æ½Ä¿¡ À־ Äõ¸® ½ºÆ®¸µÀ» ¸¸µé¾î °øÅëÀ¸·Î »ç¿ëÇϱâ À§ÇÑ ¸Þ¼ÒµåÀÌ´Ù.
Àü¿¡µµ ¼³¸íÇßµíÀÌ name=value ½ÖÀÇ ÆĶó¹ÌÅ͸¦ ÇÑÁÙÀÇ String µ¥ÀÌÅÍ·Î ¸¸µé°í ÀÖ´Ù. °¢ name=value ½Ö
Àº &·Î ±¸ºÐÁö¾î¾ß ÇÑ´Ù. name=value ½ÖÀÇ ¼ø¼­´Â »ó°ü¾ø´Ù.
function doRequestUsingGET() {
createXMLHttpRequest();
var queryString = "GetAndPostExample?";
queryString = queryString + createQueryString()
+ "&timeStamp=" + new Date().getTime();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", queryString, true);
xmlHttp.send(null);
}
À§ÀÇ ÄÚµå´Â ajax ¸¦ È°¿ëÇÏ¿© GET ¹æ½ÄÀ¸·Î ÆĶó¹ÌÅ͸¦ ¼­¹ö¿¡ º¸³»´Â ÄÚµåÀÌ´Ù. XHR °´Ã¼ »ý¼ºÈÄ Äõ¸®
½ºÆ®¸µÀ» »ý¼ºÇÑ´Ù. var queryString = "GetAndPostExample?"; ¶óÀο¡¼­ GetAndPostExample Àº
ajaxbook.chap3.GetAndPostExample ¼­ºê·¿À» È£ÃâÇϱâ À§Çؼ­ ¼­ºê·¿ À̸§°ú ¸ÅÇÎµÈ url À̸§ÀÌ´Ù. ÀÌ
ºÎºÐÀº ÇØ´ç ÄÁÅؽºÆ®ÀÇ web.xml ¿¡ ´ÙÀ½°ú °°ÀÌ ±â¼úµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.
<web-app>
<servlet>
<servlet-name>GetAndPostExample</servlet-name>
<servlet-class>ajaxbook.chap3.GetAndPostExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GetAndPostExample</servlet-name>
<url-pattern>/GetAndPostExample</url-pattern>
</servlet-mapping>
</web-app>
Äõ¸® ½ºÆ®¸µÀ» ¸¸µé¶§ "&timeStamp=" + new Date().getTime(); ºÎºÐÀ» ³ÖÀº ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù. ¸î¸î
ºê¶ó¿ìÀúµéÀº ¸íÈ®ÇÏÁö ¾ÊÀº Á¶°ÇÇÏ¿¡¼­ ¶È°°Àº url ·Î XHR ¸ÖƼ ¿äûÀ» º¸³ÂÀ»¶§ ¼­¹öÀÇ °á°ú¸¦ ij½ÌÇÏ
´Â °æÇâÀ» º¸ÀδÙ. ºñ·Ï °°Àº url ÀÌÁö¸¸ ÀÀ´äÀÌ ´Ù¸¦°æ¿ì¿£ ij½ÌÇÏ´Â °æÇâÀÌ ¿ÀÈ÷·Á ¿¹»óÄ¡ ¸øÇÑ °á°úÀÇ
¿øÀÎÀÌ µÉ ¼öµµ Àֱ⶧¹®¿¡ µÇµµ·ÏÀ̸é unique ÇÑ urlÀ» »ý¼ºÇϱâ À§ÇÑ ¹æ¹ýÀ» ÅÃÇÑ°ÍÀÌ´Ù. ÀÌ·¸°Ô »ý¼ºÇÑ
Äõ¸® ½ºÆ®¸µÀ» open ¸Þ¼Òµå¿¡ ³Ö¾îÁÖ°í send ¸Þ¼Òµå¿¡´Â null °ªÀ» ¼³Á¤ÇÑ´Ù. ´ÙÀ½Àº POST ¹æ½Ä¿¡ ´ëÇØ
¼­ »ìÆ캸ÀÚ.
function doRequestUsingPOST() {
createXMLHttpRequest();
var url = "GetAndPostExample?timeStamp=" + new Date().getTime();
var queryString = createQueryString();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(queryString);
}
POST ¹æ½Äµµ GET ¹æ½Ä°ú ¸¶Âù°¡Áö·Î °°Àº Äõ¸® ½ºÆ®¸µÀ» »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ ¿ëµµ´Â ´Ù¸£´Ù. GET ¹æ½ÄÀº
url °ú Äõ¸® ½ºÆ®¸µÀ» ÇÕÃļ­ open ¸Þ¼Òµå¿¡ ³Ö¾î¼­ »ç¿ëÇÑ ¹Ý¸é, POST ¹æ½ÄÀº À§ ÄÚµåó·³ send ¸Þ¼Òµå
¿¡ ÆĶó¹ÌÅÍ·Î ³Ö¾îÁØ´Ù. ¶Ç ´Ù¸¥ Â÷ÀÌÁ¡À̶ó¸é POST ¹æ½ÄÀº HTTP Request °´Ã¼ÀÇ ¹Ùµð¿¡ ÆĶó¹ÌÅÍ°¡
ÀúÀåµÇ´Â °ÍÀ̹ǷΠÇì´õ¿¡µµ Content-Type À» ¹Ýµå½Ã Á¤ÀÇÇØ Áà¾ß ÇÑ´Ù. Á¤ÀǸ¦ ÇØÁÖÁö ¾ÊÀ¸¸é ¼­¹ö¿¡¼­
´Â Ŭ¶óÀ̾ðÆ®¿¡¼­ º¸³½ ÆĶó¹ÌÅ͸¦ ¾òÁö ¸øÇÑ´Ù.


Ãâó: http://uip80.tistory.com/entry/¿äû-ÆĶó¹ÌÅ͸¦-¼­¹ö·Î-º¸³»±â?category=199706 [¿©¸íÀÇÁý]