REST
: 웹 서비스를 위한 분산 시스템 아키텍처 <a href>
<form method>
<script>
AJAX
를 통해 비동기적으로 데이터를 가져올 수 있다.XMLHttpRequest
을 사용하여 서버와 비동기 통신 가능
원래 jQuery
와 무관한 기술이나,
jQuery
를 통해 쉽게 사용할 수 있는 비동기 통신
$("#AjaxBtn").click( function(){
//alert("초간단AJAX");
var sg = $("#searchGubun").val();
var ss = $("#searchStr").val();
$.ajax({
method : "GET",
url : "/RestServlet",
data : "searchGubun="+sg+"&searchStr="+ss ,
error : function(myval){console.log("이건에러:" + myval);},
success : function(myval){
console.log("이건성공:" + myval);
var myval_obj = JSON.parse(myval);
console.log("성공변환: " + myval_obj[0]["regId"])
$("#resultDIV").html("<b>"+myval+"</b>")
// https://api.jquery.com/jQuery.map ( map API )
var htmlStr = "<table border=1 width=50%><tr><th>제목</th><th>글쓴이</th></tr>";
$.map(myval_obj, function(myVal, myIdx){
htmlStr += ("<tr><td>" + myVal["title"] + "</td><td>" + myVal["regId"] + "</td></tr>");
});
htmlStr += "</table>";
$("#resultDIV").empty();
$("#resultDIV").html("1, <b>" + htmlStr + "</b>");
}
});
});
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script>
// 순수 JS - for문
var arr = [{"empno" : "7733", "ename" : "smith"},
{"empno" : "7799", "ename" : "king"}];
for(var i = 0; i < arr.length; i++){
console.log(arr[i]["empno"]);
}
var arr2 = [["7733", "smith"], ["7799", "king"]];
for(var i = 0; i < arr2.length; i++){
console.log(arr2[i][0]);
}
// 순수 JS - forEach문
var arr3 = [["7733", "smith"], ["7799", "king"]];
arr3.forEach(function(val, idx){
console.log((idx+1) + "번 째 : " + val[0]);
});
</script>
<script>
//jQuery each문
$(function(){
var arr4 = [["7733", "smith"], ["7799", "king"]];
$.each(arr4, function(idx, val){
console.log(idx + "," + val[1]);
});
});
</script>
<script>
// jQuery map문
$(function() {
var arr5 = [{"empno" : "7733", "ename" : "smith"},
{"empno" : "7799", "ename" : "king"}];
$.map(arr5, function(val, idx){
console.log(idx + "," + val["ename"]);
});
myPrint("홍길동");
$("#myBtn").click(function(){
myPrint("홍홍홍");
});
$("#myDiv").click(function(){
myPrint("홍홍홍홍");
});
});
// $(document.ready()) 의 밖에 있어도 됨.
// Document가 Ready되지 않아도 실행 가능함.
// 이렇게 하면 jQuery의 기능이 여러개인 것
</script>
<script>
function myPrint(prm){
console.log("myprint() 호출 " + prm);
}
</script>
</head>
<body>
스크립트 반복문 연습<br>
<a href="#" onClick="myPrint('홍길동')">스크립트 호출</a>
<table border=1 width=100><tr><td onClick="myPrint('홍길동')" style="cursor:pointer">스크립트 호출</td></tr></table>
<input type="button" id="myBtn" value="버튼 클릭">
<div id="myDiv">디브 클릭</div>
</body>
</html>
@WebServlet("/RestServlet")
public class RestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RestServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
Gson gson = new Gson();
String pagecode = request.getParameter("pagecode");
//-------------------- #AjaxBtn 또는 #1__Str_Str_Btn --------------------
if (pagecode.equals("R001")) {
String searchGubun = request.getParameter("searchGubun");
String searchStr = request.getParameter("searchStr");
System.out.println(searchGubun + "," + searchStr);
//String responseStr = "이건 서버가 보낸 메세지";
ArrayList<BoardVO> list = new ArrayList<BoardVO>();
BoardVO bvo = new BoardVO();
bvo.setTitle("aaa");
bvo.setRegId("kim"); //[ {"title"="aaa" , "regid"="kim"} ]
list.add(bvo);
bvo = new BoardVO();
bvo.setTitle("bbb");
bvo.setRegId("hong");
list.add(bvo); //[ {"title"="aaa" , "regid"="kim"}, {"title"="bbb" , "regid"="hong"} ]
String gsonString = gson.toJson(list); //"[ {"title":"aaa" , "regid":"kim"}, {"title":"bbb" , "regid":"hong"} ]"
System.out.println(gsonString + "," + gsonString.getClass());
PrintWriter out = response.getWriter();
out.print(gsonString);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
Gson gson = new Gson();
String pagecode = request.getParameter("pagecode");
//-------------------- #2__JsonStr_Str_Btn --------------------
//data : "MY_JSONKEY=" + JSON.stringify(objData) ,
if (pagecode.equals("R002")) {
response.setContentType("text/html;charset=UTF-8");
String jsonStr = request.getParameter("MY_JSONKEY");
System.out.println(jsonStr + "," + jsonStr.getClass());
PrintWriter out = response.getWriter();
out.print("R002 응답 ok");
//-------------------- #3__Json_Str_Btn --------------------
//contentType : "application/json; charset=UTF-8",
//data : JSON.stringify(objData)
} else if (pagecode.equals("R003")) {
response.setContentType("text/html;charset=UTF-8");
String jsonStr = request.getReader().lines().collect(Collectors.joining());
System.out.println(jsonStr + "," + jsonStr.getClass());
// obj : JSON.stringify({"title":"aaaaatitle","regid":"hong"});
// str : "{"title":"aaaaatitle","regid":"hong"}"
// fromjson : {"title":"aaaaatitle","regid":"hong"}
BoardVO bvo = gson.fromJson(jsonStr, BoardVO.class);
System.out.println(bvo.getTitle());
PrintWriter out = response.getWriter();
out.print("R003 응답 ok");
//-------------------- #4__Str_Json_Btn --------------------
} else if (pagecode.equals("R004")) {
response.setContentType("application/json;charset=UTF-8");
HashMap<String, String> map = new HashMap<String, String>();
map.put("status", "200");
map.put("message", "R004 응답 ok");
String jsonStr = gson.toJson(map);
//String jsonStr = "{\"status\":\"200\", \"message\":\"R004 응답 ok\"}";
PrintWriter out = response.getWriter();
out.print(jsonStr);
//-------------------- #5__JsonStr_Json_Btn --------------------
//data : "MY_JSONKEY=" + JSON.stringify(objData) ,
} else if (pagecode.equals("R005")) {
response.setContentType("application/json;charset=UTF-8");
String jsonStrParam = request.getParameter("MY_JSONKEY");
System.out.println(jsonStrParam + "," + jsonStrParam.getClass());
HashMap<String, String> map = new HashMap<String, String>();
map.put("status", "200");
map.put("message", "R005 응답 ok");
String jsonStr = gson.toJson(map);
//String jsonStr = "{\"status\":\"200\", \"message\":\"R004 응답 ok\"}";
PrintWriter out = response.getWriter();
out.print(jsonStr);
//-------------------- #6__Json_Json_Btn --------------------
} else if (pagecode.equals("R006")) {
response.setContentType("application/json;charset=UTF-8");
HashMap<String, String> map = new HashMap<String, String>();
map.put("status", "200");
map.put("message", "R006 응답 ok");
String jsonStr = gson.toJson(map);
//String jsonStr = "{\"status\":\"200\", \"message\":\"R004 응답 ok\"}";
PrintWriter out = response.getWriter();
out.print(jsonStr);
}
}
}
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script>
//$(function() {});
$("#AjaxBtn").click( function(){
//alert("초간단AJAX");
var sg = $("#searchGubun").val();
var ss = $("#searchStr").val();
$.ajax({
method : "GET",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R001",
data : "searchGubun="+sg+"&searchStr="+ss ,
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){
console.log("성공:" + myval);
$("#resultDIV").html("<b>"+myval+"</b>")
}
});
});
$("#1__Str_Str_Btn").click( function(){
//alert("1");
var sendFormData = $("#Str_Str_Form1").serialize(); //searchGubun=contents&searchStr=11111
console.log(sendFormData);
$.ajax({
method : "GET",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R001",
data : sendFormData , //searchGubun=contents&searchStr=11111
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){
//JSON모양의 글자가 들어옴
console.log("성공:" + myval);
//obj = JSON.parse(str);
//JSON모양의 글자를 객체 JSON으로 변환
var myval_obj = JSON.parse(myval);
console.log("성공변환:" + myval_obj);
console.log("성공변환:" + myval_obj[0]["regid"]);
//https://api.jquery.com/jQuery.map/
//[{"seq":0,"title":"aaa","regid":"kim"},{"seq":0,"title":"bbb","regid":"hong"}]
var htmlStr = "<table border=1 width=50%><tr><th>제목</th><th>글쓴이</th></tr>";
$.map( myval_obj, function( MYval, MYidx ) {
htmlStr += "<tr><td>" +MYval["title"] + "</td><td>"+MYval["regid"] +"</td></tr>"
//console.log(MYval["title"] + "," + MYval["regid"] + "," + MYidx);
});
htmlStr += "</table>";
$("#resultDIV").empty();
$("#resultDIV").html("1. <b>"+htmlStr+"</b>");
}
});
});
$("#2__JsonStr_Str_Btn").click( function(){
var objData = {"name":"kim","pw":"123"};
console.log(objData);
var strData = JSON.stringify(objData)
console.log(strData);
$.ajax({
method : "POST",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R002",
contentType : "application/x-www-form-urlencoded; charset=UTF-8",
data : "MY_JSONKEY=" + JSON.stringify(objData) ,
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){ console.log("성공:" + myval); }
});
});
$("#3__Json_Str_Btn").click( function(){
var objData = {"title":"aaaaatitle","regid":"hong"};
$.ajax({
method : "POST",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R003",
contentType : "application/json; charset=UTF-8",
data : JSON.stringify(objData),
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){ console.log("성공:" + myval); }
});
});
$("#4__Str_Json_Btn").click( function(){
var sendFormData = $("#Str_Json_Form").serialize(); //searchGubun=contents&searchStr=11111
$.ajax({
method : "POST",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R004",
data : sendFormData,
dataType : "json", //생략가능
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){ //{"status":"200", "message":"R004 응답 ok"}
console.log("성공:" + myval);
console.log(myval['status'] + "," + myval['message']);
}
});
});
$("#5__JsonStr_Json_Btn").click( function(){
var objData = {"name":"kim","pw":"123"};
console.log(objData);
var strData = JSON.stringify(objData)
console.log(strData);
$.ajax({
method : "POST",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R005",
contentType : "application/x-www-form-urlencoded; charset=UTF-8",
data : "MY_JSONKEY=" + JSON.stringify(objData) ,
dataType : "json", //생략가능
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){ //{"status":"200", "message":"R004 응답 ok"}
console.log("성공:" + myval);
console.log(myval['status'] + "," + myval['message']);
}
});
});
$("#6__Json_Json_Btn").click( function(){
var objData = {"title":"aaaaatitle","regid":"hong"};
$.ajax({
method : "POST",
url : "<%=request.getContextPath()%>/RestServlet?pagecode=R006",
contentType : "application/json; charset=UTF-8",
data : JSON.stringify(objData),
dataType : "json", //생략가능
error : function(myval){ console.log("에러:" + myval); },
success : function(myval){ //{"status":"200", "message":"R004 응답 ok"}
console.log("성공:" + myval);
console.log(myval['status'] + "," + myval['message']);
}
});
});
</script>
: 웹 서비스를 위한 분산 시스템 아키텍처
Get https://kapi.kakao.com/v1/user/ids
${SERVICE_APP_ADMIN_KEY}
Content-type: application/x-www-form-urlencoded;charset=utf-8
: JSON/XML/TEXT/... 데이터표기를 사용해 데이터 송수신
: https://api.jquery.com/jQuery.ajax/
$.ajax( { settings } );
$.ajax({
*method : "GET",
*url : "/BoradServlet?pagecode=B001",
*data : { "name":"kim" , "pw":"123" }, JSON표기 내부적변환 name=kim&pw=123
: { "name": ["kim","hong"] } name=kim&name=hong
: "name=kim&pw=123"
*error : function(){ },
*success : function(){ },
contentType : "application/x-www-form-urlencoded; charset=UTF-8" 보낼데이터 타입
: "application/json; charset=UTF-8"
dataType : (xml, json, script, or html, text), 서버로부터온 응답데이터 타입
beforeSend : function(){ },
complete : function(){ },
crossDomain : false,
headers : {k:v},
});