반응형
스프링 웹 개발에는 세가지가 있다.
- 정적 컨텐츠
- 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가 기본으로 등록되어 있음
이 강의는 인프런 김영한님의 스프링 입문 강의를 듣고 정리한 것입니다.
강의 링크: https://url.kr/by9hmf
반응형
'개발 관련 공부 > 스프링 김영한 로드맵' 카테고리의 다른 글
[스프링 입문] 섹션 6. 스프링 DB 접근 기술 (0) | 2022.09.27 |
---|---|
[스프링 입문] 섹션5. 회원 관리 예제 - 웹 MVC 개발 (0) | 2022.09.21 |
[스프링 입문] 섹션 4. 스프링 빈과 의존관계 (0) | 2022.09.20 |
[스프링 입문] 섹션 3. 회원 관리 예제 - 백엔드 개발 (0) | 2022.09.18 |
[스프링 입문]섹션 1. 프로젝트 환경설정 (0) | 2022.09.17 |
댓글