Resolver

이호인·2022년 5월 4일
0

Spring

목록 보기
2/6

Resolver는 ViewResolver만 알고 있었는데 따로 찾아보니 종류가 정말 많았다. 또 따로 Resolver만 찾으려하니 잘 검색도 되지 않아 계속 찾다보니 DispatcherServlet 전략 중에 포함된 속성들이라는 것을 알게 되었고, 이번엔 Resolver 이름 가지고 있는 친구들만 정리해보려고 한다. 다음엔 나머지도!

reference!

이일민, 『토비의 스프링 3.1』, 에이콘(2012), p435 ~ 451.
https://velog.io/@jsj3282/%EC%8A%A4%ED%94%84%EB%A7%81-MVC-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC10-%EC%8A%A4%ED%94%84%EB%A7%81-MVC-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C

📌 ViewResolver

  • 핸들러 매핑이 URL로부터 컨트롤러를 찾아주는 것처럼, 뷰 이름으로부터 사용할 뷰 오브젝트를 찾아준다.
  • 뷰 리졸버는 ViewResolver 인터페이스를 구현해서 만들어지고 빈으로 등록하지 않는다면 DispatcherServlet의 디폴트 뷰 리졸버가 사용된다. (InternalResourceViewResolver)
  • 뷰 리졸버도 하나 이상 빈으로 등록해서 사용할 수 있는데 이 때 order를 사용해서 프로퍼티를 이용해 적용 순서를 지정해주는 게 좋다.

주요 ViewResolver

  1. InternalResourceViewResolver (제일 기본이라 얘만 정리~)
  • 디폴트 뷰 리졸버. 주로 JSP를 뷰로 사용하고자 할 때 쓰임.
  • 디폴트 상태의 InternalResourceViewResolver를 사용할 경우 전체 경로를 다 적어줘야하기 때문에 그대로 사용하는 일은 피하는 게 좋다.
  • 디폴트 상태로 쓰지말고 직접 빈으로 InternalResourceViewResolver를 등록하여 prefix, suffix 프로퍼티를 지정해서 사용하면 편하다.
  1. VelocityViewResolver, FreeMarkerViewResolver
  2. ResourceBundleViewResolver,XmlViewResolver, BeanNameViewResoler
  3. ContentNegotiatingViewResolver

📌 LocaleResolver

  • 애플리케이션에서 사용하는 지역정보를 결정하는 전략

디폴트 : AcceptHeaderLocaleResolver

  • HTTP 헤더의 지역정보를 그대로 사용. HTTP 헤더의 지역정보는 보통 브라우저의 기본 설정에 따라 보내진다.
  • 일반적으로 무난한 방식

브라우저의 설정을 따르지 않고 사용자가 직접 변경하도록 만드려면
SessionLocaleResolver나 CookieLocaleResolver를 사용하는 것이 편리.
HTTP 세션이나 쿠키에 들어 있는 값을 확인해서 애플리케이션의 지역 정보를 결정한다.

📌 MultipartResolver

  • 멀티파트 포맷의 요청정보를 처리하는 전략을 설정할 수 있다.
  • 멀티파트 리졸버는 디폴트로 등록되는 것이 없어 빈 등록이 필요하다.
  • 보통 과다한 크기의 파일 업로드를 막기 위해 maxUploadSize 프로퍼티를 설정하도록 권장된다.

DispatcherServlet은 클라이언트로부터 멀티파트 요청을 받으면 멀티파트 리졸버에게 요청해서 HttpServletRequest의 확장 타입인 MultipartHttpServletRequest 오브젝트로 전환한다.

게시판 파일 첨부 기능 구현하면서 강의 듣고 직접 정리해 두었던 플로우

📌 HandlerExceptionResolver

  • 컨트롤러의 작업 중에 발생한 예외를 어떻게 처리할지 결정하는 전략이다.

핸들러 예외 리졸버 등록 ❌

컨트롤러나 그 뒤에 계층에서 던져진 예외 -> DispatcherServlet이 일단 전달 받은 뒤, 다시 서블릿 밖으로 던져서 서블릿 컨테이너가 처리
다른 설정 x -> 브라우저에 http status 500 서버 오류 같은 메시지 출력

핸들러 예외 리졸버 등록 ⭕️

DispatcherServlet은 먼저 핸들러 예외 리졸버에게 해당 예외 처리를 할 수 있는지 확인.
만약 예외를 처리하는 핸들러 예외 리졸버가 있으면 예외는 DispathcerServlet 밖으로 던지지 않고 해당 핸들러 예외 리졸버가 처리한다.

HandlerExceptionResolver 구현 전략 4가지

  1. AnnotationMethodHandlerExceptionResolver (디폴트)
  2. ResponseStatusExceptionResolver (디폴트)
  3. DefalutHandlerExceptionResolver (디폴트)
  4. SimpleMappingExceptionResolver

📌 ThemeResolver

  • ViewResolver, LocaleResolver와 비슷하게 동작
    Theme를 지원하기 위해 스프링에서 제공하는 기능
  • JSP 페이지에서 테마를 사용할 수 있도록 태그 라이브러리를 제공
profile
공부 기록

0개의 댓글