본문 바로가기
Spring_inflearn/입문

[Spring] inflearn 스프링 입문 - 스프링 웹 개발 기초 2

by clolee 2022. 9. 2.

MVC와 템플릿 엔진

 

MVC : Model, View, Controller

 

과거에는 View 와 Controller 가 분리되어있지 않았음.

View에 Controller가 포함. - model1방식

지금은 MVC 스타일.

 

View : 화면을 그리는 데에 모든 역량을 집중해야 함.

Controller, Model 관련 부분들은 비지니스 로직과 관련 있거나 내부적인 것 처리에 집중 해야 함.

 

View는 화면에 관련된 일만,

비지니스 로직, 서버 와 관련된 것들은 Controller, 뒷단 비지니스 로직이 처리하고

Model에 화면에 필요한 것들을 담아 화면 쪽에 넘겨줌

 

 

외부에서 파라미터를 받는 좀 더 복잡한 컨트롤러

 

java/hello/hellospring/controller/HelloController.java 에 추가

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

템플릿 엔진으로 동작하면 hello! empty가 text "'hello ' + ${name}"로 치환

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

 

cf) thymeleaf 템플릿의 장점

html 파일을 서버 없이 열어서 확인 가능. path로 열기

서버없이 html 파일을 볼 때 hello! empty 가 보여짐

 

localhost:8080/hello-mvc 접속 시 에러 남.

Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]

 

Parameter Info 단축키 command + p

@RequestParam option 중 required default 값이 true. 기본으로 값을 넘겨야 함.

 

localhost:8080/hello-mvc?name=spring! 으로 넘겨주면 화면이 뜸

 

@RequestParam value를 spring!!!!!! 으로 바꿔 호출 

 

동작 방식

 

localhost:8080/hello-mvc?name=spring! 에서 name=spring! 으로 넘겨주면

Controller에서 name이 spring!으로 바뀜. 그 후 model에 담김

 

Controller

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

 

그 후 template ( hello-template.html ) 으로 넘어가면 model의 key값이 name인 것의 value를 꺼내 치환해줌

hello spring!이 출력됨

 

${xxx} : model에서 값을 꺼내는 것

 

웹브라우저에서 localhost:8080/hello-mvc 를 넘기면 스프링 부트 실행 시 함께 실행되는 내장 톰켓 서버를 거침

내장 톰켓 서버는 hello-mvc 가 왔음을 스프링에게 던짐

스프링은 Controller의 method 에 mapping 되어 있는지 확인해 method를 호출.

return 시 이름을 template 이름, model에는 key: name, value: spring! 넘어옴

return, model 을 스프링의 viewResolver (화면 관련. view를 찾아주고 template에 연결 시켜줌) 에 넘겨줌

viewResolver 가 return의 name과 같은 templates/hello-template.html 를 찾아 Thymeleaf 템플릿 엔진에게 처리해달라 넘김

템플릿 엔진이 렌더링 해 변환한 HTML을 웹 브라우저에 반환.

(정적 페이지 일 때는 변환하지 않았음. 그대로 반환. 템플릿 엔진의 경우 변환해 반환)

소스 보기 시 전달된 name이 변환되어 넘어간 것을 볼 수 있다.

댓글