[스프링 입문] Section 2.스프링 웹 개발 기초
Section 2
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
정적컨텐츠 (spring-Static Content)
서버에서 하는 거 없이 파일을 웹브라우저에 내려주는 컨텐츠
기본적으로 리소스는 /**에 매핑
spring.mvc.static-path-patten 속성으로 조정 가능
// 모든 리소스를 /resorces/**
spring.mvc.static-path-pattern=/resources/**
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와 템플릿 엔진
MVC: Model, View, Controller
템플릿 엔진(jsp, php 등)
서버에서 변경을해서 동적으로 바꿔주는 컨텐츠
model 1: view에서 모든걸 다하고 View와 Controller가 분리되어있지 않은 형식( 예전 방식)
model 2: MVC 사용
View는 보여지기만 하는 화면으로 사용하는 것이 좋음
resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
${}안의 값은 model에서 꺼내 값을 치환해서 웹브라우저에서 띄운다.
timeleaf의 장점. 정보가 없이 주소창에 파일 위치를 입력해서 열었을 경우 hello! empty만 띄움
hello.hellospring.controller/HelloController.java
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-mvc")
public String helloMvc(@RequestParam(value = "name", required = true) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
API
보통 서버끼리 통신할 때 사용
hello.hellospring.controller/HelloController.java
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
@GetMapping("hello-string")
@ResponseBody
// http body부에 이 데이터를 직접 넣어주겟다.
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // "hello spring" 문자 리턴
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
xml: 복잡.무거움
json: 심플. 형식으로 반환. 현재는 거의 json 방식으로 통일
getter setter: 접근자 프로퍼티. getter(획득자), setter(설정자)
getter,setter 단축키(Ctrl + Shift + S + R)
private는 밖에서 꺼낼 수 없음. getter로 꺼낼 수 있게 만들어줌 (프로퍼티 접근 방식)
@ResponseBody 를 사용
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작 (StringBoot 기능)
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
(잭슨과 구글의 gson도 있지만 Spring은 jackson 사용) - byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
=> {name: spring}
정리
정적 컨텐츠 | MVC와 템플릿 엔진 | API |
파일을 그대로 고객한테 전달 | 서버에서 변형해서 html을 바꿔 제공 | json 등 데이터 포맷으로 클라이언트에 전달하여 객체를 반환 |