sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
jQuery에서 JSON 데이터로 http request 를 요청하는데
생각해보니 HttpServlet 클래스에서 JSON을 위해 특별히 지원해주는 API는 없었다
그동안 습관적으로 jQuery로 JSON데이터를 보내면 서버에서 HttpServletRequest.getParameter() 로 데이터를 꺼냈었는데
결국 HttpServlet 는 Get과 Post 방식의 파라미터 값만 주고 받을뿐이다
이제서야 우연히 발견하였는데
jQuery에서 열심히 JSON데이터를 만들어서 보내면
jQuery가 서버에는 POST데이터로 변환한 형태로 보낸 것 같다 (jQuery레퍼런스를 보면 되겠지만 귀찮음...)
생각해보니 JSON데이터나 POST데이터나 데이터 특성이 유사해보인다
그래서 jQuery에서 포맷 변환을 하는 것 같다 (정말로 그런지는 잘 모름)
jQuery 샘플코드
var postData = {
CMD : "GET_KB_PROJECTLIST"
};
$.ajax({
type : "post",
url : serviceURL,
data : postData,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
dataType : "json",
success : function(resJo) {
if (resJo.RTN_CODE == -1) {
thisP.alert(resJo.RTN_MSG);
} else {
var nRow = -1;
for (var i=0;i<resJo.result.length;i++) {
if (resJo.result[i].owner_id == "7") {
nRow = thisP.Dataset00.addRow();
thisP.Dataset00.setColumn(nRow, "CODE", resJo.result[i].id)
thisP.Dataset00.setColumn(nRow, "DATA", resJo.result[i].name)
}
}
}
},
complete : function(data) {
;
},
error : function(xhr, status, error) {
trace("xhr="+xhr);
trace("status="+status);
trace("error"+error);
}
});
Servlet 샘플코드
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String cmd = req.getParameter("CMD");
... ... ...
}
근데 PHP어플리케이션(예> Kanboard) 에서 Rest API를 제공하는데 PHP어플리케이션 서버로 Request 요청시 JSON데이터 문자열을 직접 전달 가능하다
데이터 자체가 name, value 형태가 아닌 JSON String으로 전달되어도 PHP어플리케이션이 JSON데이터를 문제없이 Parsing하는 것 같다
반대로 POST데이터는 인식을 안할듯... 확인해보면 알겠지만 귀찮음
Servlet 샘플코드
URL url = new URL(urlStr != null ? urlStr : this.URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
byte[] xApiAuthTokenBytes = String.join(":", userStr != null ? userStr : this.USER, apitokenStr != null ? apitokenStr : this.APITOKEN).getBytes("utf-8");
String xApiAuthToken = Base64.getEncoder().encodeToString(xApiAuthTokenBytes);
connection.setRequestProperty("X-API-Auth", xApiAuthToken);
connection.setRequestProperty("Authorization", "Basic " + xApiAuthToken); //인증오류로 인해 추가함
connection.setRequestProperty("Content-type", "application/json;charset=UTF-8");
connection.setRequestMethod("POST");
connection.setDoOutput(true);
OutputStream out_stream = null;
BufferedReader brin = null;
String resStr = null;
StringBuffer resStrBuff = new StringBuffer();
try {
out_stream = connection.getOutputStream();
out_stream.write(jsonStr.getBytes("UTF-8")); //JSON데이터를 문자열로 추출한 데이터를 그대로 보낸다
out_stream.flush();
out_stream.close();
brin = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
while ((resStr = brin.readLine()) != null) {
resStrBuff.append(resStr);
}
} catch (IOException ioe) {
System.out.println("<RDEnv> Kanboard 접속이 불가합니다 - "+ioe);
} finally {
if (brin != null) {
brin.close();
brin = null;
}
out_stream = null;
connection = null;
url = null;
resStr = null;
}
if (resStrBuff.length() > 0) {
JSONParser parser = new JSONParser();
Object obj = parser.parse(resStrBuff.toString());
JSONObject jsonObject = (JSONObject) obj;
return jsonObject;
}