ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ’ป Java / Spring / JSP / jQuery Ajax๋กœ XML ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ์ˆ˜์‹ ํ•˜๊ธฐ

๋ณธ ์˜ˆ์ œ๋Š” jQuery Ajax๋ฅผ ์ด์šฉํ•ด XML ๋ฐ์ดํ„ฐ๋ฅผ POST ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ•˜๊ณ ,
์„œ๋ฒ„(Spring/Java/JSP)์—์„œ ์ฒ˜๋ฆฌ ํ›„ XML ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๐Ÿงฉ ์ „์ฒด ์ฒ˜๋ฆฌ ํ๋ฆ„

  1. ํด๋ผ์ด์–ธํŠธ (JavaScript)
    โ†’ $.ajax()๋ฅผ ์ด์šฉํ•ด XML ์š”์ฒญ ์ „์†ก
  2. ์„œ๋ฒ„ (Java / JSP)
    โ†’ XML ๊ตฌ์„ฑ ๋ฐ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ POST ์ „์†ก
    โ†’ ๊ฒฐ๊ณผ๋ฅผ XML ํ˜•ํƒœ๋กœ ์‘๋‹ต
  3. ํด๋ผ์ด์–ธํŠธ (JavaScript)
    โ†’ ๊ฒฐ๊ณผ XML์—์„œ <STATUS> ๊ฐ’ ํ™•์ธ ๋ฐ ์ฒ˜๋ฆฌ

๐Ÿง  1๏ธโƒฃ jQuery Ajax ์˜ˆ์ œ

function jsXmlFunc() {
    $.ajax({
        type: 'POST',
        url: 'testUrl.do',          // ์‹คํ–‰ํ•  ์„œ๋ฒ„ ์ธก URL
        dataType: 'xml',            // ์‘๋‹ต์„ XML ํ˜•์‹์œผ๋กœ ๋ฐ›์Œ
        data: { u_memo: 'xml ์‹คํ–‰ ๋ฉ”๋ชจ' }, // ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ
        success: function(result) {
            // XML ๋ฐ์ดํ„ฐ ์ค‘ STATUS ๋…ธ๋“œ ๊ฐ’ ํ™•์ธ
            if ("OK" == $(result).find("STATUS").text()) {
                alert("XML ์ „์†ก ์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
            } else {
                alert("XML ์ „์†ก ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
            }
        },
        error: function(result) {
            alert("error !");
        }
    });
}

๐Ÿ“Œ dataType: 'xml'์„ ์ง€์ •ํ•ด์•ผ jQuery๊ฐ€ ์‘๋‹ต์„ XML DOM ๊ฐ์ฒด๋กœ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿงพ 2๏ธโƒฃ ์„œ๋ฒ„ (Java / Spring Controller)

์•„๋ž˜ ์ฝ”๋“œ๋Š” Java ๊ธฐ๋ฐ˜ Controller์—์„œ XML ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€๋กœ ์ „์†กํ•œ ๋’ค,
์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ XML ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

import java.io.*;
import java.net.*;
import javax.servlet.http.*;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping(value = "testUrl.do")
public ActionForward testUrl(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response, Box box) throws Exception {

    URL url = new URL("http://www.test.com/recive.do"); // XML ์ „์†ก ๋Œ€์ƒ URL
    HttpURLConnection httpurlcnn = (HttpURLConnection) url.openConnection();

    httpurlcnn.setConnectTimeout(10000);
    httpurlcnn.setDoInput(true);
    httpurlcnn.setDoOutput(true);
    httpurlcnn.setUseCaches(false);
    httpurlcnn.setRequestMethod("POST");
    httpurlcnn.setRequestProperty("Content-Type", "application/xml; charset=UTF-8");

    // ์ „์†กํ•  XML ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ
    String xmlData = "";
    xmlData += "<DATA>";
    xmlData += "<NAME>ํ™๊ธธ๋™</NAME>";
    xmlData += "<AGE>25</AGE>";
    xmlData += "<ADDR>์„œ์šธํŠน๋ณ„์‹œ</ADDR>";
    xmlData += "</DATA>";

    // XML ์ „์†ก
    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(httpurlcnn.getOutputStream(), "UTF-8"));
    wr.write(xmlData);
    wr.flush();
    wr.close();

    // ์‘๋‹ต ์ˆ˜์‹ 
    String xmlPasingStr = "";
    BufferedReader br = new BufferedReader(new InputStreamReader(httpurlcnn.getInputStream(), "UTF-8"));
    String line;
    while ((line = br.readLine()) != null) {
        xmlPasingStr += line;
    }
    br.close();

    // ๊ฒฐ๊ณผ XML ์ถœ๋ ฅ
    return getXmlView(response, xmlPasingStr);
}

// XML ๋ฌธ์ž์—ด์„ Response๋กœ ์ถœ๋ ฅ
public void getXmlView(HttpServletResponse response, String xmlPasingStr) throws IOException {
    response.setContentType("text/xml;charset=UTF-8");
    PrintWriter pw = response.getWriter();
    pw.write(xmlPasingStr);
    pw.close();
}

๐Ÿงพ 3๏ธโƒฃ ์‘๋‹ต XML ์ƒ˜ํ”Œ

<?xml version="1.0" encoding="euc-kr"?>
<RESULT>
  <STATUS>OK</STATUS>
  <MSG>์„ฑ๊ณต</MSG>
</RESULT>

๐Ÿ’ก encoding ์€ ํ•œ๊ธ€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ
euc-kr ๋˜๋Š” utf-8 ์ค‘ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  4๏ธโƒฃ ๋™์ž‘ ์š”์•ฝ

๋‹จ๊ณ„ ๊ตฌ๋ถ„ ๋‚ด์šฉ
1 jQuery Ajax๋กœ XML ์š”์ฒญ POST ์ „์†ก
2 Java XML ์ƒ์„ฑ โ†’ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ
3 Java ์‘๋‹ต XML ์ˆ˜์‹  ๋ฐ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜
4 jQuery XML ๊ฒฐ๊ณผ์˜ <STATUS> ๊ฐ’ ํ™•์ธ ํ›„ ์ฒ˜๋ฆฌ

โœ… 5๏ธโƒฃ ํŒ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

  • Content-Type ํ—ค๋”๋Š” ๋ฐ˜๋“œ์‹œ "application/xml; charset=UTF-8" ๋กœ ์ง€์ •ํ•ด์•ผ ํ•จ
  • jQuery dataType ์†์„ฑ์ด xml์ด ์•„๋‹ ๊ฒฝ์šฐ, ์‘๋‹ต ํŒŒ์‹ฑ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • XML ๋ฌธ์„œ์˜ ์ตœ์ƒ์œ„ ํƒœ๊ทธ(๋ฃจํŠธ)๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์—ฌ์•ผ ํ•จ (<RESULT>...</RESULT>)
  • ์™ธ๋ถ€ ์„œ๋ฒ„ ํ˜ธ์ถœ ์‹œ ConnectTimeout ์„ ์ ์ ˆํžˆ ์„ค์ •ํ•˜์—ฌ ์ง€์—ฐ ๋ฐฉ์ง€
๋Œ“๊ธ€