정적 컨텐츠
src > resources > static에 파일을 작성한 후 "localhost:8080/ 작성한 파일"로 이동하면 입력한 파일이 그대로 반환됨
- localhost:8080/hello-static.html 검색
- 내장 톰캣 서버가 스프링에 hello-static.html이라는 요청이 왔다고 스프링에 전달
- 스프링부트가 controller에 hello-static.html이 있는지 확인 (controller가 우선권을 가짐)
- 없으면 resources안에 static/hello-static.html을 찾아 웹브라우저에 반환
- 원하는 파일을 static에 만들면 만든 정적파일이 그대로 반환됨
- 어떠한 프로그래밍을 할 수 없음
MVC와 템플릿 엔진
MVC : Model, View, Controller
- 과거에는 view, controller 분리 X -> 역할을 분리할 필요 O, view는 화면을 그리는데 집중, controller는 내부적 로직을 처리하는데 집중
//src/main/java/hello.helloSpring/controller/HelloController.java
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
//resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
- localhost:8080/hello-mvc 접속시 "Required String parameter 'name' is not present" 오류 -> command+p 단축키 이용하여 parameter 정보 보기
- prameter required의 default 값이 true이기 때문에 기본으로 값을 넘겨주어야함 -> ex) localhost:8080/hello-mvc?name =spring
- localhost:8080/hello-mvc 검색
- 내장 톰캣 서버가 스프링에 hello-mvc 라는 요청이 왔다고 스프링에 전달
- 스프링부트가 controller에 hello-mvc 있는지 확인
- 있으므로 해당 method 호출. (return hello-template , model(name:spring) )을 스프링에 넘겨줌
- viewResolver (view를 찾아주고 템플릿 엔진 연결)가 템플릿 엔진에 처리해달라고 넘김
- 템플릿 엔진이 변환 후 웹 브라우저에 넘겨줌
API
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
- @responseBody :
뷰 리졸버( viewResolver )를 사용하지 않음
@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;
} }
}
- return 값으로 객체 넘김 (json 방식 - {key:value} )
- 단축키 command+N -> getter, setter 생성
@responseBody 사용 원리
- localhost:8080/hello-api 검색
- 내장 톰캣 서버가 스프링에 hello-api 라는 요청이 왔다고 스프링에 전달
- 스프링부트가 controller에 hello-api 있는지 확인
- 있는거 확인, @responseBody가 붙어있으므로 viewResolver 동작 X, HttpMessageConverter 동작 O
- 기본 문자면 StringHttpMessageConverter (그대로 넘겨줌), 기본 객체면 MappingJackson2HttpMessageConverter( json 방식으로 데이터를 변환하여 넘겨줌)
- byte 처리 등등 기타 여러 HttpMessageConverter 존재
'개발 스터디 > Spring' 카테고리의 다른 글
[스프링 핵심원리 - 기본편] 객체 지향 설계와 스프링 (0) | 2023.05.02 |
---|---|
[Spring 스터디]웹 MVC 개발 (0) | 2023.04.08 |
[Spring 스터디] 스프링빈과 의존관계 (0) | 2023.04.05 |
[Spring 스터디] 스프링 예제 (회원 관리 서비스) (0) | 2023.04.05 |
[Spring 스터디] 스프링 프로젝트 생성하기 (feat. 프로젝트 생성 오류 해결) (0) | 2023.04.04 |