본문 바로가기

국비필기노트/Spring

Spring_Spring의 http 응답 파라미터

Http 응답

 

기본적으로 정적페이지는 static 폴더 밑에서 사용되고 동적인 페이지는 templates로 사용된다.

정적페이지와 동적페이지를 구분하는 기준은 DB에서 정보를 가지고 오는가의 차이다. 

 

  • 정적리소스 기본경로: src/main/resources/static
  • 동적리소스 기본경로: src/main/resources/templates

 

Model vs ModelAndView

 

  • Model: 데이터만 저장
  • ModelAndView: 데이터와 이동하고자 하는 view page를 같이 저장한다. 

 

예시

 

*ResponseViewController.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
26
27
28
package com.koreait.core.web.basic.response;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class ResponseViewController {
 
    
        //버전1
        @RequestMapping("/response-view-v1")
        public ModelAndView responseViewV1() {
            ModelAndView mav = new ModelAndView("response/hello").addObject("data","hello!!");    
            return mav;
        }
        
        //버전2
        //@ResponseBody
        @RequestMapping("/response-view-v2")
        public String responseViewV2(Model model){
            model.addAttribute("data","model Hello!!");
            
            return "response/hello";
        }
}
 
cs

 

*hello.html

 

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <p th:text="${data}">empty</p>
</body>
</html>
cs

 

point1. 클래스 생성 위치

 

 

java클래스는 java폴더밑에 넣어주고 해당 html은 Controller에서 값을 받아오는 것이기에 정적이 아닌 동적페이지로서 templates에 저장시켜주었다. 

 

point2. 버전1

 

첫번째 응답을 보내는 것은 ModelAndView를 사용하였다.

hello와 .html을 spring에서 붙혀주기때문에 ModelAndView 뒤에 response/hello를 붙혀주었다. 

 

 

point3. 버전2

 

Controller 어노테이션이 붙어져있는 클래스에서 에서 return이 String이면 return에 적혀져있는 view를 찾아가게된다. 즉, modelAndView 객체는 필요없어지기에 이를 생략 가능하다. 

 

단순히 view를 찾는 것 뿐만 아니라 데이터를 넘겨주고 싶을 땐 Model을 매개변수로 담아와서 여기서 데이터를 보내주는 것이 가능하다. 주로 버전 2의 방법을 사용한다. 

 

 

point4. @ResponseBody

 

버전2에서 주석처리해둔 @ResponseBody를 풀면 return 뒤의 문자열 response/hello가 그대로 리턴되어 출력이 된다. 

ResponseBody는 Json타입으로만 데이터를 주고받을때에 필수적으로 사용을 하는 것으로 그 외의 부분은 사용법을 정확히 알고 사용해야한다.