[JAVA] 스프링 웹 개발 기초

Saemi Min·2023년 3월 7일
0

BackEnd

목록 보기
1/8
post-thumbnail

정적 컨텐츠

스프링 부트는 정적 컨텐츠 기능을 자동으로 제공한다.
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content

내장 톰켓 서버에서 요청을 받고, 컨트롤러에서 hello-static 컨트롤러가 있는지 확인함.
컨트롤러가 우선순위를 가진다는 의미!
없으면, 내부에 있는 static/hello-static.html을 찾음. 있으면 이를 반환해줌!


MVC와 템플릿 엔진

MVC : Model, View, Controller

Controller

controller/HelloController

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

View

resources/templates/hello-template.html

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

"hello! empty"는 서버 없이 그냥 html을 볼 때 보이는 문구이다. 없어도 된다.

결과

url에 name=spring을 줬기 때문에 hello empty가 아닌 hello spring이 나온것이다

구조


웹 브라우저에서 localhost:8080/hello-mvc를 넘기면 스프링 부트를 띄울 때 같이 띄우는 내장 톰켓 서버를 먼저 거침.
스프링은 helloController에 매핑 되어있는 것을 확인하고, 해당 메서드를 호출해주고, return해줄때 이름을 hello-template으로 model에는 name이 spring 값을 스프링한테 넘겨주면 viewResolver가 templates/hello-template.html을 찾아서 템플릿 엔진이 넘겨서 HTML로 변환해줘서 보여준다.


API

controller/HelloController

@Controller
public class HelloController {
   @GetMapping("hello-string")
   @ResponseBody
   public String helloString(@RequestParam("name") String name) {
   		return "hello " + name;
   }
}
  • @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음
  • 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

@ResponseBody를 꼭 넣어줘야 한다!
html에 나오는 Body태그를 의미하는 것이 아닌 HTTP에서 통신 프로토콜의 Body 부분에 내용을 직접 넣어주겠다는 의미이다.
데이터를 그대로 보여주는 방식이다. html 사용X

controller/HelloController

@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으로 변환됨

문자가 아닌 데이터를 보여주고자 한다면
json 방식이다

alt+insert하면 getter, setter 단축키로 생성할 수 있음

구조

@ResponseBody가 안붙여져 있다면 viewResolver가 동작하지만, 붙여져 있다면, 그리고 객체가 오면! HttpMessageConverter가 동작함. 단순 문자라면 StringConverter동작하고, 객체라면 JsonConverter가 동작함.

@ResponseBody 를 사용

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter 가 동작
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

인프런 강의 "스프링 입문- 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의를 들으면서 복습하는 강의 노트 취지로 작성 중입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

profile
I believe in myself.

0개의 댓글