본문 바로가기
개인프로젝트/Todo-list 만들기

JSON 데이터 전달 과정

by 구월에작은섬 2018. 7. 16.

JSON (JavaScript Object Notation)


JSON은 JAVASCRIPT객체를 만들 때 사용하는 표현식이다. 사람도, 기계도 이해하기 쉬운 구조로 되어있다. 최근 XML을 대체해서 데이터의 전송에 많이 사용된다.


JSON의 구조

JSON은 두개의 구조를 기본으로 두고 있다.

1. name/value 형태의 쌍으로 collection 타입. EX) object, record, struct(구조체), dictionary, hash table, 키가 있는 list, 또는 연상배열.

: { String 1 : Value 1, String 2 : Value 2 ... }
 
2. 값들의 순서화된 리스트. EX) array, vector, list, sequence


: [ Value 1, Value2, Value 3 , ... ]



과제 요구사항


데이터 이동이 어떻게 되는지 파악해 보자.


1. 프로젝트를 서버에서 시동하면 index.jsp파일을 먼저 읽게 된다.


2. index.jsp파일은 Main Servlet으로 redirect를 시킨다. Main Servlet의 주소는 /main으로 줄여서 지정했다.


<% response.sendRedirect("main");%> 


3. Main Servlet은 데이터베이스의 값을 TodoDao의 객체를 생성, 데이터베이스와 통신하여 값을 배열로 저장한다. 3개의 타입 'toDo' 'doing', 'done'에 맞춰 3가지 객체를 생성했다.


4. 배열 형태의 값을 Jackson library의 objectMapper클래스를 이용해서 JSON String Array형식으로 변환한다.


5. request.setAttribute를 이용하여 request Scope에 저장, RequestDispatcher을 이용해서 다음 서블릿으로 전달한다.



<3~5과정 MainServlet.java>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        // 데이터베이스에서 list 받아오기/보내기
        TodoDao dao = new TodoDao();
        ObjectMapper objectMapper = new ObjectMapper();
        
        // todoList저장
        ArrayList<TodoDto> listTodo = dao.getTodos("todo");
        String todo = objectMapper.writeValueAsString(listTodo);
        request.setAttribute("listTodo", todo);
 
        // doingList저장
        ArrayList<TodoDto> listDoing = dao.getTodos("doing");
        String doing = objectMapper.writeValueAsString(listDoing);
        request.setAttribute("listDoing", doing);
        
        // doneList저장
        ArrayList<TodoDto> listDone = dao.getTodos("done");
        String done = objectMapper.writeValueAsString(listDone);
        request.setAttribute("listDone", done);
 
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/main.jsp");
        requestDispatcher.forward(request, response);
    }
cs



6. main.jsp는 request스코프의 담긴 값을 request.getAttribute로 읽는다. 


7. ObjectMapper클래스를 import하여 JSON String Array를 Java Array class로 변환시켜준다.



main.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="toDoList.TodoDto"%>
<%@ page import="com.fasterxml.jackson.databind.ObjectMapper"%>
 
    <%
        String todo = (String) request.getAttribute("listTodo");
        String doing = (String) request.getAttribute("listDoing");
        String done = (String) request.getAttribute("listDone");
        ObjectMapper mapper = new ObjectMapper();
        TodoDto[] todoList = mapper.readValue(todo, TodoDto[].class);
        TodoDto[] doingList = mapper.readValue(todo, TodoDto[].class);
        TodoDto[] doneList = mapper.readValue(todo, TodoDto[].class);
    %>
cs



*  데이터를 바탕으로 아래 시작 화면을 출력한다.