스프링 입문2

jiwon·2022년 9월 14일
0

스프링 입문

목록 보기
2/2
post-custom-banner

스프링 웹 개발에는 세가지가 있다.

  • 정적 컨텐츠
  • mvc와 템플릿 엔진
  • api

정적 컨텐츠

정적 컨텐츠는 말 그대로 그냥 파일을 때려박는다는 뜻..

이런 애들이다. 그냥 고정된 웹페이지들

mvc와 템플릿 엔진

mvc: model, view, controller

컨트롤러

@Controller
public class HelloController {
 @GetMapping("hello-mvc")
 public String helloMvc(@RequestParam("name") String name, Model model) {
 model.addAttribute("name", name);
 return "hello-template";
 }
}

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>


위 화면에서 파라미터로 넘겨준 것에 주의.
컨트롤러에서 파라미터로 받도록 작성했기 때문.

api

@GetMapping("hello-string")
    @ResponseBody //http의 body에 이 데이터를 내가 직접 넣어줄게
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name;
    }

실행해보면 그냥 넣어준 값이 냅다 화면에 나타난다.
화면에 있는 뭔가를 조작하는게 아니라 그냥 때려박는 느낌?

@GetMapping("hello-string")
    @ResponseBody //http의 body에 이 데이터를 내가 직접 넣어줄게
    public String helloString(@RequestParam("name") String name) {
        return "<html>hello " + name+"</html>";
    }

화면조작으로 하려면 이런식으로 해야하는데..굳이 이렇게할 이유가 없음.

@GetMapping("hello-string")
    @ResponseBody //http의 body에 이 데이터를 내가 직접 넣어줄게
    public String helloString(@RequestParam("name") String name) {
        return "<html>hello " + name+"</html>";
    }
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
    static class Hello {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

Hello 라는 객체를 만들어서 써먹어 보자.

비로소 평소에 아는 api같이 생긴게 나온다.
문자열이 아닌 객체가 반환이되면, 디폴트가 json방식으로 반환하는게 기본 정책이다.

동작방식은 위와 같다. 템플릿 엔진과의 가장 큰 차이점이 @ResponseBody의 존재인데 얘를 눈여겨 보자.

@ResponseBody를 사용하면...

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter 가 동작
    기본 문자처리: StringHttpMessageConverter
    기본 객체처리: MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
profile
개발 공부합니다. 파이팅!
post-custom-banner

0개의 댓글