본문 바로가기
JSP/연습

그럼 JSON으로 클라-> 서블렛 // 서블렛 -->클라로 해보자

by SEOKIHOUSE 2023. 6. 21.
  • 클라 -->서블렛으로 넘기는 과정

1. 먼저 자바스크립트 배열을 만든 후 stringify로 JSON 형식의 문자열로 변환

2. application/json으로 전달

3. request.Reader()로 받아서 읽어주고 readLine()으로 값 읽어서 저장

4. JSONObject 사용하여  JSON 데이터를 파싱하여 객체로 변환

5. get으로 값을 뽑아낸 후 형변환 해서 변수에 저장

6. 자바객체 UserBean 생성 후 set으로 저장

---------------------------------

  • 여기서부턴 서블렛->클라보내는 영역

7. JSONObject를 써서 JSON 객체 생성 후 6번에서 set한걸 넣어주고 JSON 형태의 객체로 만들어준다

8. PrintWriter로 보내준다

9. 자바스크립트에서 받고 JSON 문자열을 JavaScript에서 사용 가능한 객체로 변환  -->JSON.parse 사용

parse라는 걸 활용하려면 {"name":"흰둥이","age":3} 이런식의 형태가 넘어온다는 것을 기억하자!!

10.자바스크립트 객체값 뽑듯이 값을 뽑아내면 된다~


<%@ 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>
		window.onload = function() {
			const btns = document.querySelector("#btns");
			btns.addEventListener("click", f);
			
			let array = {
				name: "흰둥이",
				age: 3
			};
			let jstr = JSON.stringify(array);
			function f() {
				const xhttp = new XMLHttpRequest();
				xhttp.onload = function() {
					let jobj = JSON.parse(this.responseText);
					
					document.querySelector("#divs").innerHTML = "이름:" + jobj.name +"<br>나이:" + jobj.age;
				}
				xhttp.open("Post","Json_03practice",true);
				xhttp.setRequestHeader("Content-type", "application/json");
				xhttp.send(jstr);
			}
		}
	</script>
</head>
<body>
	<button id="btns">버튼동작</button>
	<div id="divs"></div>
</body>
</html>
package servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.json.JSONObject;

import beans.UserBean;

@WebServlet("/Json_03practice")
public class Json_03practice extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		BufferedReader br = request.getReader();
		String s =br.readLine();
		
		JSONObject jobj = new JSONObject(s);
		System.out.println(jobj);
		System.out.println(jobj.get("name"));
		System.out.println(jobj.get("age"));
		System.out.println("---------------");
		
//		String name = (String)jobj.get("name");
		String name = jobj.getString("name");
		Integer age = (Integer)jobj.get("age");
		System.out.println(name);
		System.out.println(age);
		System.out.println("---------------");
		
		UserBean ub = new UserBean(name, age);
		
		JSONObject jobj2 = new JSONObject(ub);
		System.out.println(jobj2);
		response.setCharacterEncoding("utf-8");
		PrintWriter pw = response.getWriter();
		pw.print(jobj2);
	}

}
package beans;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserBean {
	private String name;
	private int age;
}