Json

서울IT코드정리 /kyChoi·2021년 11월 2일
0

JSP 정리❤

목록 보기
13/22

서버와 클라이언트 간에 정보를 전달할때 자바스크립트의 array-like 형태로 보내자

-> Json

Json에 대해서

클라이언트에서 서버로 보냅니다.

1.클라이언트에서 서버로 보내면 String 이 되어야 합니다.

String 이 아니라면 String 으로 만들어 줘야 겠죠.

JSON.stringify() 반환값 없습니다.

2. 서버에서 클라이언트로 보냅니다

String 으로 만들고 보내야 합니다.

JSON.stringify() 반환값 없습니다.

서버에서 클라이언트로 부터 값을 받습니다.

받은 값은 String 이라서 필요하다면 json 형태로 바꿔줘야 합니다.

JSONObject obj = JSONObject.fromObject() 를 이용합니다.

obj 는 값을 가지고 있습니다. 주소값이 아닙니다.

키 값을 반환하고 값을 출력하고 싶다면 MAP 을 사용합니다.

JSON의 부모는 map 입니다.

여러데이터를 한꺼번에 받아서 저장하는 방법

JSONObject obj1 = (JSONObject)obj.get("list");

array2 = new ArrayList<>();

{id:id1, pw:pw1}

이 obj1 에 있습니다.

이걸 한꺼번에 set에 넣게 도와주는 메소드가 toBean 입니다.

toBean메소드는 JSONObject 가 가지고 있습니다 반환형은 MemberBean 입니다.

MemberBean bean =(MemberBean) JSONObject.toBean(obj1,MemberBean.class)

이제 obj1 에 있는 키가 MemberBean 에 맞게 들어가고, 값이 들어갑니다~ 개발자에게 정말 소중한 메소드입니다.

관련 로직입니다

List<MemberBean> array2=null;
try{
/*
{"list":[
{"addr":"addr1","id":"id1","pw":"pw1","tel":"tel1"},
{"addr":"addr2","id":"id2","pw":"pw2","tel":"tel2"},
{"addr":"addr3","id":"id3","pw":"pw3","tel":"tel3"}
]}
*/
String str=request.getParameter("sendData");
JSONObject json1=JSONObject.fromObject(str);
JSONArray array1=(JSONArray)json1.get("list");
array2=new ArrayList<>();//컬렉션에 담았기에, 출력하기 위해 for문 사용합니다
for(Object obj : array1){
JSONObject json=(JSONObject)obj;
MemberBean bean=(MemberBean)JSONObject.toBean(json, MemberBean.class);
array2.add(bean);
}
MemberDAOImpl.getInstance().insertMember(array2);
}catch(Exception e){
System.out.println(e);
}
%> 
<%=array2.get(0).getId() %> 

$.ajax 의 특징

1, 서버에 화면 이동없이 다녀오다

2. 동기와 비동기식

$.ajax({
url:"ajax2.jsp",
async : false, //기본값이 true 비동기식 입니다
success:function(){
$("#b2").css("backgroundColor","orange");
}
});
$("#b3").css("backgroundColor","green");
}
작업이 끝날동안 기다리지 않고 다음을 진행합니다

웹서버와 데이터를 주고받을때 사용되는 것이 바로 xmlhttpRequest 객체입니다.**




현업에서 .xml 로 데이터를 보낼건지, JSON으로 보낼건지 약속하고 사용합니다

<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Map<String,Object> map=new HashMap<>();
map.put("aa","bb");
map.put("cc",new int[]{100,200,300});
List list=new ArrayList<>();
list.add("aa");
list.add("bb");
map.put("dd",list);
JSONObject obj=JSONObject.fromObject(map);
out.println(obj);
%>

#### JsonObject 를 import 한걸로 봐서 외부 lib를 사용했음을 유추해야 합니다
#### 현업가면 다른거 사용하겠지만, 동작원리는 거의 같다고 봐도 됩니다.
#### map객체를 만들어서 키 와 값들로 채워 넣습니다, 그리고 list 객체에 담았습니다,list 객체에 aa랑 bb를 담았습니다.
#### 그럼 map 에는 "aa":"bb,"cc":"[100,200,300]","dd":["aa","bb"] 이 담겨있어요 
담겨 있다는 말은 map을 출력하면 주소값이 나오고 그 주소가 해당 값을 가지고있다는 말이에요, 그래서, 우리가 보고 싶은 값으로 출력하려면  JSON 형태로 바꿔줘야 합니다

그걸 해주는 메소드가 fromObject(map) 입니다.

<%@page import="java.util.HashMap"%>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="java.util.Map"%>
<%@page import="kr.co.seoulit.member.to.MemberBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
MemberBean bean=new MemberBean();
bean.setId("aa");
bean.setPw("bb");
bean.setAddr("cc");
bean.setTel("dd");

Map<String,Object> map=new HashMap<>();
map.put("member",bean);
JSONObject obj=JSONObject.fromObject(map);
out.println(obj);
%>

bean에 id,pw,addr,tel 을 세팅해 줍니다. 
map 에 "member"라는 키 값에 bean 주소를 세팅해 줍니다.
그럼 MemberBean이 가진 값들을 가진 객체가 생성됩니다.
값은 멤버변수를 의미하며 status, rownum,id,pw,addr,tel 이 있습니다.
{"member":{"addr":"cc","id":"aa","pw":"bb","rownum":"","status":"","tel":"dd"}}

member라는 키값에 addr부터 tel이라는 키값(bean의 멤버변수)이 값(setId)을 가집니다. 

<%
String id=request.getParameter("id");
MemberDAO dao=MemberDAOImpl.getInstance();
MemberBean bean=dao.selectMember(id);
Map<String,Object> map=new HashMap<>();
map.put("member",bean);
JSONObject obj=JSONObject.fromObject(map);
out.println(obj);
%>

//id 값을 주지 않고 url 만 입력하면 id 는 null 입니다, bean은 null 입니다~


<%
MemberBean bean = null;
try{
String sendData=request.getParameter("sendData"); 반환형이 String 입니다
JSONObject object = JSONObject.fromObject(sendData); //JSONOBject 로 형 변환합니다
JSONObject object2=(JSONObject)object.get("member");//JSON은 map 을 부모로 가지고 있어서
get 메쏘드로 키값을 주면 값을 반환 받습니다. toBean을 사용해서, MemberBean에 키와 값들이 세팅됩니다.
bean=(MemberBean)JSONObject.toBean(object2,MemberBean.class);
MemberDAOImpl.getInstance().insertMember(bean);
}catch(Exception e){
System.out.print(e);
}

%>
<%=bean.getAddr()%>

List array2=null;
try{
/
{"list":[
{"addr":"addr1","id":"id1","pw":"pw1","tel":"tel1"},
{"addr":"addr2","id":"id2","pw":"pw2","tel":"tel2"},
{"addr":"addr3","id":"id3","pw":"pw3","tel":"tel3"}
]} //이렇게 데이터를 받아 왔습니다
/
String str=request.getParameter("sendData");
JSONObject json1=JSONObject.fromObject(str);// 받은 String 을 JSONObject로 만듭니다
JSONArray array1=(JSONArray)json1.get("list"); //list 키값을 주고 값을 받습니다
array2=new ArrayList<>();
for(Object obj : array1){ //array1 for문으로 출력합니다
JSONObject json=(JSONObject)obj;//toBean 인자의 자료형은 JSONObject 임돠
MemberBean bean=(MemberBean)JSONObject.toBean(json, MemberBean.class);
array2.add(bean);
}
MemberDAOImpl.getInstance().insertMember(array2);
}catch(Exception e){
System.out.println(e);
}
%>
<%=array2.get(0).getId() %>

ID :
PW :
ADDR :
TEL :
//가입 submit 을 누르면 textTag에 값으로 jsonobject 가 들어가고 패러미터이름인 senddata로 날라갑니다. ```
profile
건물주가 되는 그날까지

0개의 댓글