티스토리 뷰

 

Q. JSP(View)와 Controller의 소통

A. 보통 두 가지 방식으로 소통한다.

a. Form Submission 
b. AJAX 요청

 

 

a. Form Submission

 (JSP - > Controller )

JSP에서의 <form>은 주로 POST 방식으로 데이터를 서버에 보낼 때 사용된다. 
주로 사용자가 입력한 데이터를 서버로 보내거나, 서버에 요청을 전달하고자 할 때 사용된다. 

 

예시) 

jsp -> 이 폼이 제출되면 'update' 라는 URL로 POST 요청이 보내진다. 이 URL에 매핑된 Controller 메서드가 
요청을 처리한다.

<form action="update" method="post">
    <input type="hidden" id="deliveryId" name="deliveryId" value="${delivery.deliveryId}">
    <button type="submit">수정</button>
</form>

 

Controller ->  delivery 객체로 폼 데이터가 바인딩됩니다. 업데이트 후 배송지 목록 페이지로 리디렉션

@Controller
public class DeliveryController {
    @PostMapping("/update")
    public String updateDelivery(@ModelAttribute Delivery delivery) {
        // delivery 객체로 폼 데이터가 바인딩됩니다.
        deliveryService.updateDelivery(delivery);
        return "redirect:/deliveryList"; // 업데이트 후 배송지 목록 페이지로 리디렉션
    }
}

 

 

 

b. AJAX 요청

((JSP < -  Controller) or (JSP - > Controller ))

 

JavaScript 를 사용하여 Ajax 요청을 보내는 경우, 

주로 비동기 방식(= 페이지를 새로고침하지 않고  )으로 데이터를 요청하고 응답을 받는다. 

이 경우 주로 GET or POST 방식으로 요청을 보낸다.


예를 들어 삭제 버튼을 클릭할 때 AJAX 요청을 할 수 있다.

 

예시)

JavaScript -> 

$("#deleteButton").click(function() {
    var deliveryId = $("#deliveryId").val();
    $.ajax({
        url: "delete",
        type: "POST",
        data: { deliveryId: deliveryId },
        success: function(data) {
            location.reload(); // 성공 시 페이지 새로고침
        },
        error: function(xhr, status, error) {
            console.error("배송지 삭제 실패:", error);
        }
    });
});

 

 

Controller ->

@RestController
public class DeliveryController {

    @PostMapping("/delete")
    public ResponseEntity<String> deleteDelivery(@RequestParam("deliveryId") int deliveryId) {
        deliveryService.deleteDelivery(deliveryId);
        return ResponseEntity.ok("삭제 성공");
    }
}

 

 

 

 

 

Q. JSON과 JavaScript의 사용 시기
A.
   a. JSON(JavaSript Object Notation) : 데이터 교환 포맷. 특히 AJAX 요청과 같은 비동기 통신에서 많이 사용
   b. JavaScript : 사용자 인터페이스와의 상호 작용(동적) , 비동기 통신(AJAX) , DOM 조작(HTML 문서 요서를 동적 조작)

DOM (Document Object Model ) : 문서 구조를 표현하는 API, HTML 및 XML 문서의 요소를 트리 구조로 표현한다. JavaScript를 사용하여 DOM에 접근하고 수정할 수 있으며,
이를 통해 웹 페이지의 내용, 구조 및 스타일을 변결할 수 있다.

 

 

 

 

a. JSON(JavaSript Object Notation) 

서버와 클라이언트 간에 데이터를 주고받을 때 주고 사용. 
특히 AJAX 요청과 같은 비동기 통신에서 많이 사용된다 
키-값 쌍의 집합 

 

사용하는 이유 : 

1. 간결하고 가독성이 좋음 
2. 다양한 플랫폼과 언어에서 지원 
3. 웹 애플리케이션 간의 소통 : 클라이언트 측 JavaScript에서 JSON을 사용하여 서버로 데이터를 
보내거나, 서버에서 클라이언트로 데이터를 전달할 수  있다. 
4. AJAX 요청과 함께 사용 : 대부분은의 AJAX 요청은 서버로부터 받은 데이터를 JSON 형식으로 
수신하거나, JSON 형식으로 서버에 데이터를 보낸다.

 

JSON과 JavaScript 의 관계 :

JSON은 JavaScript 객체와 유사하지만, JavaScript와 완전히 독립적인 형식이다. 
즉, JSON은 다른 언어에서도 사용할 수 있다.
JSON은 JavaScript의 특성 중 하나지만, JavaScript와 JSON은 서로 다른 개념이다.

 

 

예시 )

 AJAX 요청에 대한 응답으로 JSON을 반환할 수 있다. 

// AJAX 요청
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true); // 서버로부터 데이터를 요청
xhr.onreadystatechange = function() {
  if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
    // JSON 응답 파싱
    var response = JSON.parse(xhr.responseText); // 응답 받은 JSON 데이터를 파싱하여 출력
    console.log(response); // JSON 데이터 출력
  }
};
xhr.send();

 

 

 

b. JavaScript 

클라이언트 사이드 스크립트 언어. 

브라우저에서 동작하며, 

 

1. 사용자 인터페이스와의 상호 작용(동적) - 버튼 클릭/폼 제출 
2. 비동기 통신 - AJAX 사용해 서버에 HTTP 요청을 보내고 서버로 부터 응답을 받아와서 웹 페이지를 업데이트
3. DOM 조작 - HTML 문서 요서를 동적으로 조작가능 - 웹 페이지 내용, 스타일, 구조 변경 및 추가

 

등을 처리한다.

 

 
예시 ) 

클라이언트 측에서 데이터를 처리하고, UI 업데이트를 수행한다. 

예를 들어, 서버로 부터 JSON을 응답을 받은 후,
JavaScript로 DOM을 업데이트 한다. 

 

// 예시 JSON 응답 데이터
var jsonData = {
  "name": "John",
  "age": 30,
  "city": "New York"
};
// DOM 업데이트 함수
function updateUI(data) {
  // UI 업데이트
  document.getElementById("name").textContent = data.name;
  document.getElementById("age").textContent = data.age;
  document.getElementById("city").textContent = data.city;
}

// UI 업데이트 함수 호출
updateUI(jsonData);

 

 

DOM (Document Object Model )

 

예시)

<!DOCTYPE html>
<html>
<head>
    <title>DOM 예시</title>
</head>
<body>

<div id="myDiv">
    <p>Hello, World!</p>
</div>

<script>
    // DOM 요소 선택하고 내용 변경하기
    var divElement = document.getElementById("myDiv");
    divElement.innerHTML = "<p>New content</p>";

    // 새로운 요소 생성하고 DOM에 추가하기
    var newElement = document.createElement("p");
    newElement.textContent = "Added dynamically";
    divElement.appendChild(newElement);
</script>

</body>
</html>

 

 

 

 

 

 

Q. 일반 Controller 와 RESTController의 차이
A.
  a. 일반 Controller(@Controller) : 주로 웹 페이지를 반환한다. (View(jsp 등) 를 반환) 
  b. RESTController(@RESTController) : JSON, XMl 등의 데이터를 반환

 

 

 

 a. 일반 Controller(@Controller)

 

주로 웹 페이지를 반환한다. (View(jsp 등) 를 반환) , 
메서드는 일반적으로 String을 반환하며, 이 String 은 jsp의 이름을 의미한다

주로 동기적으로 작동하며, 사용자의 요청에 따라 화면을 동적으로 업데이트

 

 

예시)

 

"hello" jsp로 반환

 

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "hello"; // hello.jsp로 포워드
    }
}

 

 

 

b. RESTController(@RESTController) 

 

JSON, XMl 등의 데이터를 반환 , 
메서드는 일반적으로 객체를 반환하며 , 이 객체는 JSON 또는 XML로 변환되어 클라이언트에 전달된다.

RESTful 웹 서비스를 구축하기 위해 사용된다. 비동기방식. 

 

 

RESTAPI(Representational State Transfer) : 

 RESTful 서비스를 구현한 API.
REST API는 HTTP를 통해 자원을 생성, 읽기, 수정, 삭제하기 위한 표준화된 방법을 제공한다. 

 

 

참고 : 

2024.05.22 - [5월] - REST API, RESTful 아키텍쳐 , REST Controller 정리

 

 

비동기 방식 : 

요청과 응답이 동시에 일어나지 않는 방식을 말한다. 
클라이언트가 요청을 보내면 서버는 해당 요청에 대한 응답을 즉시 반환하지 않고, 나중에 응답을 반환할
때까지 대기하지 않고 다른 작업을 계속할 수 있다. 

 

 

예시)

 

ResponseEntity<String> = 객체 반환 ,  

ResponseEntity.ok("Hello, World!"); = JSON or XML 로 변환되어 전달

 

@RestController
public class MyRestController {

    @GetMapping("/api/hello")
    public ResponseEntity<String> hello() {
        return ResponseEntity.ok("Hello, World!");
    }
}

 

 

 

 

 

 

오늘의 요약

* View - Controller 의 소통 - Form 제출과 AJAX 요청을 통해 이루어진다
* JSON - JavaScript 의 사용 - JSON은 데이터 교환 포맷이고, JavaScript는 클라이언트 사이드 로직 처리 
* 일반 Controller VS RESTController - 일반 Controller는 View를 반환, RESTController는 데이터를 반환
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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 26 27 28 29 30
글 보관함