MVC - HTTP

Jiwon·2022년 3월 4일
0

인프런

목록 보기
10/14

정적 리소스

/static /public /resources /META-INF/resources

정적 리소스 경로

src/main/resources/static
에 파일이 들어있으면

예) src/main/resources/static/basic/hello-form.html
-> http://localhost:8080/basic/hello-form.html
이런 식으로 웹 브라우저에서 실행된다.

뷰 템플릿

뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어서 전달.
스프링 부트는 기본 뷰 템플릿 경로를 제공

  • String을 반환하는 경우 - View or HTTP 메시지
    @ResponseBody 가 없으면 response/hello 로 뷰 리졸버가 실행되어서 뷰를 찾고, 렌더링.
    @ResponseBody 가 있으면 뷰 리졸버를 실행하지 않고, HTTP 메시지 바디에 직접 response/hello 라는 문자가 입력.

  • Void를 반환하는 경우
    @Controller 를 사용하고, HttpServletResponse, OutputStream(Writer) 같은 HTTP 메시지 바디를 처리하는 파라미터가 없으면 요청 URL을 참고해서 논리 뷰 이름으로 사용.
    ( 요청 URL : /response/hello
    실행 : templates/response/hello.html )
    -> 참고로 이 방식은 명시성이 너무 떨어지고 이렇게 딱 맞는 경우도 많이 없어서, 권장하지 않음

  • HTTP 메시지
    @ResponseBody, HttpEntity 를 사용하면, 뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 응답 데이터 출력 가능

HTTP 메시지 컨버터

뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다.

응답의 경우 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 가 선택된다.

  • 스프링 MVC는 다음의 경우 HTTP 메시지 컨버터를 적용한다.
    HTTP 요청 : @RequestBody, HttpEntity(RequestEntity) ,
    HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity),

요청 매핑 헨들러 어뎁터 구조


동작 방식
ArgumentResolver의 supportsParameter() 을 호출해서 해당 파라미터를 지원하는지 체크하고, 지원하면 resolveArgument() 를 호출해서 실제 객체 생성. -> 생성된 객체가 컨트롤러 호출시 넘어가는 것

profile
과연 나는 ?

0개의 댓글