[spring입문]웹 개발 기초

10908 단어 SpringSpring

정적 컨텐츠

받은 것을 그대로 내려줌

웹 브라우저에서 내장 톰캣 서버로 hello-static.html이 오면 스프링한테 hello-static.html가 왔다고 넘김. 스프링은 컨트롤러 쪽에서 hello-static 관련한 것이 있는지 찾아봄(컨트롤러가 우선순위를 갖는다는 뜻). 없으면 리소스에서 hello-static.html를 찾음. 있으면 그냥 반환해주는 것

resources/static/hello-static.html
<!DOCTYPE HTML>
<html>
<head>
 <title>static content</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

MVC와 템플릿 엔진

받은 것들을 서버에서 조금 변형을 해서 html을 조금 바꿔서 내려줌

웹 브라우저에서 내장 톰캣 서버로 hello-mvc를 받아서 스프링한테 hello-mvc가 왔다고 알려줌. 스프링은 'helloController에 저 메서드에 매핑이 되어있네?'하고 그 메서드를 호출. 리턴: hello-template. model(name:spring)을 viewResolver(화면과 관련된 어떤 해결자. 뷰를 찾아주고 템플릿 엔진을 연결시켜줌)가 templates/hello-template.html를 찾아서 타임리프 템플릿한테 처리해주세요 하고 넘김. 그럼 템플릿 엔진이 변환을 해서 넘겨줌.

Controller
@Controller
public class HelloController {
 @GetMapping("hello-mvc")
 public String helloMvc(@RequestParam("name") String name, Model model) {
 model.addAttribute("name", name);
 return "hello-template";
 }
}
View
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body></html>

MVC - Model, View, Controller
View - 화면을 그리는데에 집중을 해야함 (예전에는 view에서 다 했음. 디비 접근이나 내부적인 거나 뭐 등등)
Controller - 비지니스 로직과 관련이 있거나, 내부적인 것에 집중을 해야함

API

json이라는 데이터 포맷으로 내려줌(키, 밸류로 이루어진 구조. 심플해서 최근에는 대부분 json을 사용한다고 함). 뷰, 리액트, 등에서 쓰임. 서버끼리 통신할 때

웹 브라우저에서 내장 톰캣 서버로 hello-api를 받아서 스프링한테 왔다고 알려줌. 스프링은 helloController에 hello-api가 있는 걸 확인. @Responsebody가 붙어있으면 http응답에 줘야겠다고 생각함. 그냥 문자인 경우 그냥 넘김(viewResolver대신에 StringConverter). 문자가 아니라 객체인 경우 json방식으로 데이터를 만들어서 http응답에 반환함(viewResolver대신에 JsonConverter). 이게 기본 원칙임.

@ResponseBody 문자 반환
@Controller
public class HelloController {
 @GetMapping("hello-string")
 @ResponseBody
 public String helloString(@RequestParam("name") String name) {
 return "hello " + name;
 }
}

@Responsebody --> http의 body부분에 이 데이터를 직접 넣어주겠다는 뜻 (걍 무식하게 문자만 그대로 넘어감. html 태그 같은 거 없음). @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음

@ResponseBody 객체 반환
@Controller
public class 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;
 }
 }
}

@ResponseBody 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환됨

좋은 웹페이지 즐겨찾기