JSP
[JSP]Server에서 Client로 JSON데이터 전송하기
siyuning
2022. 7. 7. 10:55
🧐JSON? Server와 Client는 JSON을 통해서 통신하는데, JSON은 객체와 배열을 그대로 전달할 수 있다.
Server에서 JSON형태로 Client에 데이터를 전송할 수 있다. 예제를 통해 살펴보도록 하자 !
[ex] JS내장객체 Object객체의 keys메서드
[ex] 주석처리부분을 loop문으로 변경하기
- t1.jsp
<script>
let list={"member_list":[]};
window.onload=function(){
document.querySelector("#addButton").onclick=addFunc;
}
function addFunc(){
let obj={"id":"","pw":"","addr":"","tel":""};
/*
obj["id"]=document.querySelector("#id").value;
obj["pw"]=document.querySelector("#pw").value;
obj["addr"]=document.querySelector("#addr").value;
obj["tel"]=document.querySelector("#tel").value;
*/
list["member_list"].push(obj);
document.querySelector("#data").innerHTML=JSON.stringify(list);
}
function send(){
document.forms["f"].elements["data"].value=JSON.stringify(list);
document.forms["f"].submit();
}
</script>
<input type="text" id="id" />
<input type="text" id="pw" />
<input type="text" id="addr" />
<input type="text" id="tel" />
<input type="button" value="추가" id="addButton"/>
<div id="data"></div>
<form action="t2.jsp" name="f">
<input type="hidden" name="data" />
<input type="button" value="전송" onclick="send()"/>
</form>
- t2.jsp
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="net.sf.json.JSONArray"%>
<%
String str=request.getParameter("data");
JSONObject json1=JSONObject.fromObject(str);
JSONArray array=json1.getJSONArray("member_list");
for(Object obj : array){
JSONObject json=(JSONObject)obj;
Member dto=(Member)JSONObject.toBean(json,Member.class);
out.print(dto.getId()+"<br/>");
}
%>
[an]
- t1.jsp
function addFunc(){
let obj={"id":"","pw":"","addr":"","tel":""};
Object.keys(obj).forEach(
key => obj[key]=document.querySelector("#"+key).value
);
list["member_list"].push(obj);
document.querySelector("#data").innerHTML=JSON.stringify(list);
Object.keys(obj).forEach(
key => document.querySelector("#"+key).value=""
/*추가 버튼 눌렀을 때 txt안의 내용지우기*/
);
}
🧚♀️
Object.keys() : 주어진 객체의 속성 이름들을 일반적인 반복문과 동일한 순서로 순회되는 열거할 수 있는 배열로 반환한다.
forEach() : 주어진 함수를 배열 요소 각각에 대해 실행한다.
[ex] http://localhost:8282/project4/t3.jsp
위와 같이 실행하면 아래와 같이 출력된다.
{"aa":"bb","cc":[10,20]}
자바스크립트로 JSON데이터를 받은뒤 화면에
bb 20이 각각 출력되게 하려면?
- t3.jsp
<%@page import="net.sf.json.JSONObject"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%
Map<String,Object> map=new HashMap<>();
map.put("aa","bb");
map.put("cc",new int[]{10,20});
JSONObject json=JSONObject.fromObject(map);
out.print(json);
%>
<script>
let data=<%=json%>;
document.write(data["aa"]+"<br/>");
document.write(data["cc"][1]+"<br/>");
</script>
[ex] 주석처리부분을 서버에서 받아와 처리하려면?
- t1.jsp
function addFunc(){
/* let obj={"id":"","pw":"","addr":"","tel":""}; */
Object.keys(obj).forEach(
key => obj[key]=document.querySelector("#"+key).value
);
list["member_list"].push(obj);
document.querySelector("#data").innerHTML=JSON.stringify(list);
Object.keys(obj).forEach(
key => document.querySelector("#"+key).value=""
);
}
[an]
- t1.jsp
<%@page import="net.sf.json.JSONObject"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%
Map<String,Object> map=new HashMap<>();
map.put("member",new Member());
JSONObject json=JSONObject.fromObject(map);
%>
<script>
...
let obj=<%=json%>.member; // let obj=<%=json.get("member")%>;
...
</script>
💛회원 1명 정보 출력
[ex] http://localhost:8282/project4/t4.jsp?id=abc
위와 같이 요청했을때 아래와 같이 출력되려면?
{"member":{"addr":"addr5","id":"id5","pw":"pw5","tel":"tel5"}}
[an]
- t4.jsp
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAO"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAOImpl"%>
<%
MemberDAO dao=MemberDAOImpl.getInstance();
Member dto=dao.selectMember(request.getParameter("id"));
Map<String,Object> map=new HashMap<>();
map.put("member",dto);
JSONObject json=JSONObject.fromObject(map);
out.print(json);
%>
[ex] 위 소스코드에서 회원정보를 script태그에서 출력하려면?
[an]
- t4.jsp
<script>
let data=<%=json%>;
document.write("ID : "+data.member.id+"<br/>");
document.write("PW : "+data.member.pw+"<br/>");
document.write("ADDR : "+data.member.addr+"<br/>");
document.write("TEL : "+data.member.tel+"<br/>");
</script>
[ex] http://localhost:8282/project4/t4.jsp?id=abc
위와 같이 요청했을때 텍스트에 회원정보를 출력하려면?
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAO"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberDAO dao=MemberDAOImpl.getInstance();
Member dto=dao.selectMember(request.getParameter("id"));
Map<String,Object> map=new HashMap<>();
map.put("member",dto);
JSONObject json=JSONObject.fromObject(map);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
ID : <input type="text" /><br/>
PW : <input type="text" /><br/>
ADDR : <input type="text" /><br/>
TEL : <input type="text" /><br/>
</body>
</html>
[an]
<script>
window.onload=function(){
let data=<%=json%>.member;
document.querySelector("#id").value=data["id"];
document.querySelector("#pw").value=data["pw"];
document.querySelector("#addr").value=data["addr"];
document.querySelector("#tel").value=data["tel"];
}
</script>
ID : <input type="text" id="id"/><br/>
PW : <input type="text" id="pw"/><br/>
ADDR : <input type="text" id="addr"/><br/>
TEL : <input type="text" id="tel"/><br/>
💛람다식 → 무명함수
[ex] http://localhost:8282/project4/t5.jsp?id=abc
다음 문장에서 람다식을 무명함수로 바꾸기
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAO"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberDAO dao=MemberDAOImpl.getInstance();
Member dto=dao.selectMember(request.getParameter("id"));
Map<String,Object> map=new HashMap<>();
map.put("member",dto);
JSONObject json=JSONObject.fromObject(map);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
window.onload=function(){
let data=<%=json%>.member;
Object.keys(data).forEach(
key => document.querySelector("#"+value=data[key]
);
}
</script>
</head>
<body>
ID : <input type="text" id="id"/><br/>
PW : <input type="text" id="pw"/><br/>
ADDR : <input type="text" id="addr"/><br/>
TEL : <input type="text" id="tel"/><br/>
</body>
</html>
[an]
- t5.jsp
<script>
window.onload=function(){
let data=<%=json%>.member;
Object.keys(data).forEach(
function(key){
document.querySelector("#"+key).value=data[key];
}
);
}
</script>
💛회원 list 출력
[ex] http://localhost:8282/project4/t6.jsp
위와 같이 요청했을때 아래와 같이 출력되려면?
{"list":[
{"addr":"addr1","id":"id1","pw":"pw1","tel":"tel1"},
{"addr":"addr2","id":"id2","pw":"pw2","tel":"tel2"},
{"addr":"addr5","id":"id5","pw":"pw5","tel":"tel5"}
}
[an]
- t6.jsp
<%@page import="java.util.List"%>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAO"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberDAO dao=MemberDAOImpl.getInstance();
List<Member> list=dao.selectMemberList();
Map<String,Object> map=new HashMap<>();
map.put("list",list);
JSONObject json=JSONObject.fromObject(map);
out.print(json);
%>
💛회원 list, member 출력
[ex] http://localhost:8282/project4/t7.jsp?id=id5
위와 같이 요청했을때 아래와 같이 출력되려면?
{
"list":[
{"addr":"addr1","id":"id1","pw":"pw1","tel":"tel1"},
{"addr":"addr2","id":"id2","pw":"pw2","tel":"tel2"},
{"addr":"addr5","id":"id5","pw":"pw5","tel":"tel5"}
],
"member" : {"addr":"addr5","id":"id5","pw":"pw5","tel":"tel5"}
}
[an]
- t7.jsp
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="java.util.List"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAO"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberDAO dao=MemberDAOImpl.getInstance();
List<Member> list=dao.selectMemberList();
Member member=dao.selectMember(request.getParameter("id"));
Map<String,Object> map=new HashMap<>();
map.put("list",list);
map.put("member",member);
JSONObject json=JSONObject.fromObject(map);
out.print(json);
%>
💛회원 ID만 출력
[ex] 위 소스코드에서 script태그에서 회원의 ID만 모두 출력하는 문장 작성하기
[an]
- t8.jsp
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="kr.co.seoulit.member.dto.Member"%>
<%@page import="java.util.List"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAO"%>
<%@page import="kr.co.seoulit.member.dao.MemberDAOImpl"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberDAO dao=MemberDAOImpl.getInstance();
List<Member> list=dao.selectMemberList();
Map<String,Object> map=new HashMap<>();
map.put("list",list);
JSONObject json=JSONObject.fromObject(map);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script>
let data=<%=json%>;
data.list.forEach(
member => document.write(member.id+"<br/>")
);
</script>
</body>
</html>