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

XML À» ¿äû ÆĶó¹ÌÅÍ·Î »ç¿ëÇϱâ

GAScripter
Ãßõ ¼ö 154

¿¹Á¦ 3-13Àº ajax¸¦ ÀÌ¿ëÇÏ¿© ºê¶ó¿ìÀúÀÇ ÆĶó¹ÌÅ͸¦ ¼­¹ö·Î Àü¼ÛÇÏ°í ±× °á°ú¸¦ ó¸®ÇÏ´Â ºÎºÐÀ» ÁÖ·Î
»ìÆ캸¾Ò´Ù. ÇÏÁö¸¸ ÆĶó¹ÌÅ͸¦ name=value ½ÖÀ¸·Î º¸³»´Â °ÍÀº Ãʺ¸³ª ÇÏ´Â ÁþÀ¸·Î º¸ÀÏ ¼ö ÀÖ°í Á»´õ
È®Á¤¼º°ú À¯¿¬¼º ±×¸®°í °¡µ¶¼ºÀ» ³ôÀÌ´Â ¹æÇâÀ¸·Î ³ë·ÂÀ» Çغ¸ÀÚ. ÆĶó¹ÌÅ͸¦ xml ·Î º¯È¯Çؼ­ ó¸®Çϵµ
·Ï ÇÏ´Â °ÍÀÌ´Ù. Èï¹ÌÁøÁøÇÏÁö ¾ÊÀº°¡? ±×·¸´Ù°í ÀÌ ¹æ½ÄÀÌ ¿Ïº®ÇÑ ÇØ°áÃ¥ÀÌ µÇ´Â °ÍÀº ¾Æ´Ï´Ù. À̹ø ¿¹Á¦
µµ ¹°·Ð ½ÇÇèÀûÀÌ°í ±âÃÊÀûÀÎ Äڵ带 °¡Áö°í ±× È°¿ëµµ¸¦ ¸ð»öÇÒ °ÍÀÌ´Ù.
<!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 an XML Request</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 createXML() {
var xml = "<pets>";
var options = document.getElementById("petTypes").childNodes;
var option = null;
for(var i = 0; i <options.length; i++) {
option = options[i];
if(option.selected) {
xml = xml + "<type>" + option.value + "<₩/type>";
}
}
xml = xml + "<₩/pets>";
return xml;
}
function sendPetTypes() {
createXMLHttpRequest();
var xml = createXML();
var url = "PostingXMLExample?timeStamp=" + new Date().getTime();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(xml);
}
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>Select the types of pets in your home:</h1>
<form action="#">
<select id="petTypes" size="6" multiple="true">
<option value="cats">Cats</option>
<option value="dogs">Dogs</option>
<option value="fish">Fish</option>
<option value="birds">Birds</option>
<option value="hamsters">Hamsters</option>
<option value="rabbits">Rabbits</option>
</select>
<br/><br/>
<input type="button" value="Submit Pets" onclick="sendPetTypes();"/>
</form>
<h2>Server Response:</h2>
<div id="serverResponse"></div>
</body>
</html>
<3-14 postingXML.html ÀÇ Àüü ¼Ò½º ÄÚµå>
package ajaxbook.chap3;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class PostingXMLExample extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String xml = readXMLFromRequestBody(request);
Document xmlDoc = null;
try {
xmlDoc =
DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(new ByteArrayInputStream(xml.getBytes()));
}
catch(ParserConfigurationException e) {
System.out.println("ParserConfigurationException: " + e);
}
catch(SAXException e) {
System.out.println("SAXException: " + e);
}
/* Note how the Java implementation of the W3C DOM has the same methods
* as the JavaScript implementation, such as getElementsByTagName and
* getNodeValue.
*/
NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");
String type = null;
String responseText = "Selected Pets: ";
for(int i = 0; i <selectedPetTypes.getLength(); i++) {
type = selectedPetTypes.item(i).getFirstChild().getNodeValue();
responseText = responseText + " " + type;
}
response.setContentType("text/xml");
response.getWriter().print(responseText);
}
private String readXMLFromRequestBody(HttpServletRequest request){
StringBuffer xml = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while((line = reader.readLine()) != null) {
xml.append(line);
}
}
catch(Exception e) {
System.out.println("Error reading XML: " + e.toString());
}
return xml.toString();
}
}
<3-15 PostingXMLExample.java ÀÇ Àüü ¼Ò½º ÄÚµå>
3-14´Â ¿ÏÀü html ³¯ÄÚµùÀ̶ó ½Ç¸ÁÇÒ ¼öµµ ÀÖ°Ú´Ù. ÆĶó¹ÌÅ͸¦ ´ã°í ÀÖ´Â xml À» ½ºÆ®¸µ Á¶ÇÕÀ¸·Î »ý¼ºÇØ
¼­ ¼­¹ö·Î Àü¼ÛÇÑ´Ù. Àü¼Û¹æ½ÄÀº »ùÇà 3-12 ÀÇ POST ¹æ½Ä°ú µ¿ÀÏÇÏ´Ù. 3-15 ´Â ¼­ºê¸´À¸·Î½á ºê¶ó¿ìÀú
¿¡¼­ request °´Ã¼ÀÇ body ¿¡ ½Ç¾îº¸³½ xml À» ÆĽÌÇؼ­ µ¥ÀÌÅ͸¦ ÃßÃâÇÑ ÈÄ ÀÏÁ¤ÇÑ Çü½ÄÀÇ ¹®ÀÚ¿­·Î º¯
ȯÇÏ¿© ´Ù½Ã Ŭ¶óÀ̾ðÆ®·Î º¸³»ÁÖ´Â ¹æ½ÄÀÌ´Ù. À̹ø ¼­¹ö ÇÁ·Î±×·¥¿ª½Ã xml À» ÆĽÌÇÏ°í Á¤º¸¸¦ ÃßÃâÇÏ´Â
ºÎºÐ¿¡ ´ëÇؼ­´Â Ưº°ÇÑ ¼³¸íÀ» ÇÏÁö´Â ¾Ê°Ú´Ù. ÇÏÁö¸¸ ¼­ºí¸´¿¡¼­ ÇÑ°¡Áö ¤°í ³Ñ¾î°¡ÀÚ¸é Ŭ¶óÀ̾ðÆ®·Î
ºÎÅÍ ¹ÞÀº xML À» ÆĽÌÇÒ¶§ Document ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϴµ¥, ÀÌ ´Â W3C °¡ ±¸Ã¼È­ÇÑ °ÍÀ¸·Î DOM
°´Ã¼¿¡ Á¸ÀçÇÏ´Â °°Àº ±â´ÉÀÇ ¸Þ¼ÒµåÀÎ getElementsByTagName("type") À» »ç¿ëÇÏ°í ÀÖ´Ù´Â Á¡ÀÌ´Ù. ³ª
ÀÇ ÁÖ¿ä ³íÁ¡Àº ¾îµð±îÁö³ª Ŭ¶óÀ̾ðÆ®ÀÌ´Ù. ÇÙ½É ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.
function createXML() {
var xml = "<pets>";
var options = document.getElementById("petTypes").childNodes;
var option = null;
for(var i = 0; i <options.length; i++) {
option = options[i];
if(option.selected) {
xml = xml + "<type>" + option.value + "<₩/type>";
}
}
xml = xml + "<₩/pets>";
return xml;
}
ÇÙ½É ·ÎÁ÷ÀÌÁö¸¸ ³Ê¹« °£´ÜÇؼ­ ¼³¸íÇÒ °Íµµ ¾øÀ» °Í °°´Ù. À§ ºÎºÐÀº xmlÀ» String Çü½ÄÀÇ Äõ¸® ½ºÆ¼¸µÀ»
»ý¼ºÇÏ´Â ºÎºÐÀÌ´Ù. petTypes ´Â select box ¿¡¼­ option ¿¤¸®¸ÕÆ® °ªÀ» ÃßÃâÇÏ¿© ¹®ÀÚ¿­À» ¸¸µå´Â ºÎºÐ
ÀÌ´Ù.
function sendPetTypes() {
createXMLHttpRequest();
var xml = createXML();
var url = "PostingXMLExample?timeStamp=" + new Date().getTime();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(xml);
}
À§ ÄÚµå ¿ª½Ã ÀÌÀü »ùÇÿ¡¼­ ´Ù·ç¾ú±â ¶§¹®¿¡ Ưº°ÇÏ°Ô ¼³¸íÇÑ ºÎºÐÀº ¾ø´Ù. ÇÏÁö¸¸ ÇÑ°¡Áö ¤°í ³Ñ¾î°¥
ºÎºÐÀÌ Àִµ¥, send() ¸Þ¼ÒµåÀÇ ÆĶó¹ÌÅÍ¿¡´Â ¹®ÀÚ¿­ ¹× DOM °´Ã¼¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ¿Ö
À̹ø ¿¹Á¦¿¡¼­´Â DOM °´Ã¼ ´ë½Å¿¡ ¹®ÀÚ¿­À» ³Ö¾úÀ»±î? ¾Æ½±°Ôµµ Áö±Ý±îÁö ºê¶ó¿ìÀú°£ DOM °´Ã¼¸¦ »ý¼º
Çؼ­ °øÅëÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. IE ÀÇ °æ¿ì´Â ActiveXObject ÄÁÆ®·ÑÀ» ÅëÇؼ­, ¸ð
Áú¶ó´Â native ÀÚ¹Ù½º¸³Æ®¸¦ ÅëÇؼ­ Á¦°øÇϸç, ½ÉÁö¾î ÀÌ·± ¹æ¹ýÁ¶Â÷ Áö¿øÇÏÁö ¾Ê´Â ºê¶ó¿ìÀúµµ Á¸ÀçÇÑ´Ù.
µû¶ó¼­ ¾î¿¼ö ¾øÀÌ ½ºÆ®¸µ°ªÀ» ¼³Á¤ÇÑ °ÍÀÌ´Ù.
´ÙÀ½Àº À§ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ °á°ú È­¸éÀÌ´Ù.
<3-16 postingXML.html ÀÇ ½ÇÇà °á°ú È­¸é>



Ãâó: http://uip80.tistory.com/entry/XML-À»-¿äû-ÆĶó¹ÌÅÍ·Î-»ç¿ëÇϱâ?category=199706 [¿©¸íÀÇÁý]