(인프런) 김영한 님의 스프링입문 - 코드로 배우는 스프링부트,웹 MVC, DB접근기술 강의를 보고 리뷰한 글입니다.
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
정적 컨텐츠
static 폴더에 hello-static.html 파일을 만든다.
<!DOCTYPE HTML>
<html>
<head>
<title>Hello</title>
<meta http-equiv = "Content-Type" content="text/html; charset= UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
<a href = "/hello">hello</a>
</body>
</html>
정적 파일이 그대로 반환되어 렌더링 된다.
http://localhost:8080/hello-static.html 주소를 치면 톰켓 서버에서 스피링 컨테이너에서 hello-static 관련 컨트롤러를 찾아본다. (우선순위)
하지만 파일이 존재하지 않으므로 resources의 static 에서 hello-static.html을 찾는다.
존재하면 html 파일 반환 및 렌더링
MVC와 템플릿 엔진
MVC = Model View Controller
<HelloController>
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@GetMapping("hello") //웹어플리케이션에서 /hello라고 들어오면 이 메소드 호출함.
public String hello(Model model){
model.addAttribute("data", "Spring!!!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(name = "name", required = false) String name, Model model) {
model.addAttribute("name",name);
return "hello-template";
}
}
<hello-template.html>
<!DOCTYPE HTML>
<html xmlns:th = "http://www.thymeleaf.org">
<body>
<p th:text = "'안녕하세요. ' + ${name}" >Hello! empty</p>
</body>
</html>
주소에 localhost:8080/hello-mvc?name={name}
name 부분에 넣는 값에따라 HelloController의 name 부분에 들어 가는 값이 변한다.
이후 hello-template.html에 ${name} (= 모델에서 key 값을 꺼낸다는 의미) 부분에 들어간다.
API
@ResponseBody 를 사용하는 경우 HTTP의 BODY에 문자 내용을 직접 반환
'viewResovler'대신에 'httpMessageConverter'가 동작
● 문자열의 경우
HelloController 부분에 추가
@GetMapping("hello-spring")
@ResponseBody //http 에서 바디부에 이 데이터를 직접 넣어주겠다는 의미
public String helloSpring(@RequestParam("name") String name){
return "hello "+ name;
}
localhost:8080/hello-spring?name=spring을 넣는경우 소스를 보면, html 태그 없이 hello spring이라고 되어있음.
Mvc와 다르게 템플릿을 조작하는 방식이 아닌 데이터를 그대로 내려줌.
●데이터의 경우
HelloController 부분에 추가
//데이터를 내려주는 경우
@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;
}
}
Json 형식으로 렌더링이 된다.
웹 브라우저에서 localhost:8080/hello-api를 치면 톰켓 서버에서 hello-api를 스프링에 던진다.
@ResponseBody이 없으면 viewResolver에 던져서 해당되는 템플릿을 찾아서 돌려줌.
하지만 @ResponseBody가 있고 문자열인 경우 이 문자열을 HTTP 응답에 바로 넣어서 넘겨줌. -> StringConverter 동작
문자열이 아니고 객체를 넘겨주는 경우 json 형태로 데이터를 만들어서 HTTP 응답에 반환해줌. -> JsonConverter 동작
즉,
기본 문자 처리 : StringHttpMessageConverter
기본 객체 처리 : MappingJackson2HttpMessageConverter
'백엔드 공부 > 스프링 입문' 카테고리의 다른 글
스프링 DB 접근 기술 (0) | 2024.03.08 |
---|---|
회원 관리 예제 - 웹 MVC 개발 (0) | 2024.03.06 |
스프링 빈과 의존관계 (1) | 2024.03.06 |
스프링 입문 : 프로젝트 환경 설정 (0) | 2024.03.05 |