본문 바로가기

Spring

ViewResolver 참고: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-viewresolver ViewResolver란? Spring MVC의 DispatcherServlet은 뷰 관련 처리를 ViewResolver에 위임했다. ViewResolver는 문자열로 반환된 뷰 네임을 확인한 후 적절한 뷰를 찾아준다. View Resolution DispatcherServlet는 HandlerAdaptor의 handle 메소드를 호출하여 요청을 처리한다. 그리고 결과로 ModelAndView 객체를 전달받는다. ModelAndView는 말그대로 model과 view를 프로퍼티로 들고있는 객체이다. 이 때 ModelAndView..
RequestParam 참고: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-requestparam\ 요청 파라미터 (uri의 쿼리 파라미터 or form-data) 를 특정 클래스 인스터스로 바인딩해주는 역할. Note that use of @RequestParam is optional (for example, to set its attributes). By default, any argument that is a simple value type (as determined by BeanUtils#isSimpleProperty) and is not resolved by any other argument resolver,..
ResponseEntity 응답 본문 뿐만 아니라, 헤더, 상태코드까지 설정가능하다. 즉, 응답 전체를 내 마음대로 조작할 수 있다. 반면에 @ResponseBody는 메소드의 반환값이 바디에 들어가는 것을 설정할 뿐, 상태코드, 헤더 등을 조작할 수는 없다. 참고: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types
RequestMapping 스프링 mvc에서 특정 요청을 처리하는 핸들러를 명시할 때 사용하는 어노테이션을 제공한다. 이를 사용하면 손쉽게 특정 요청을 처리하도록 설정할 수 있고, 간결해서 가독성에도 좋다. name : 해당 언노테이션에게 별칭을 붙이기 위해 사용 value : 처리할 uri 패턴들(String 배열)을 기입. ex. RequestMapping(value={"/spring", "/mvc"}) RequestMapping("/spring/{name}") RequestMapping("/spring/*") RequestMapping("/spring/**") RequestMapping("/spring/?") 여기서 ?: matches one character *: matches zero or more characters w..
HandlerMapping Dispatcher Servlet은 프로퍼티로 handlerMapping 구현체 컬렉션을 가지고 있다. 스프링 mvc에서 사용하는 HandlerMapping은 말 그대로 요청을 처리할 핸들러를 연결하는 역할이다. HandlerMapping은 아래와 같은 인터페이스이다. 여기서 getHandler를 통해 해당 요청(HttpServletRequest)를 처리할 수 있는 핸들러를 찾아서 HandlerExecutionChain 객체를 반환한다. HandlerExecutionChain은 간단히 말해, handler와 interceptor등 요청 하나를 처리하기 위한 흐름을 하나의 객체에 모아둔 것이라고 보면 된다. 이를 위해 HandlerMapping의 구현체는 url과 핸들러를 매핑하는 mappingTable을..
Resource Handler 스프링은 정적인 데이터를 서빙하는 역할을하는 리소스 핸들러를 제공한다. 핸들러를 설정하는 방법은 간단하다. 아래와 같이 WebMvcConfigurer를 상속하여 addResourceHandlers를 구현하면 된다. 결과적으로는 핸들러 매핑이 디스패처 서블릿에 추가되는데, 이 핸들러 매핑은 우선순위가 낮아서 다른 핸들러매핑이 처리하지 않으면 리소스 처리가 이뤄지는 방식인 듯 하다(이건 좀더 확인해봐야지) 스프링이 리소스 핸들러를 설정하는 코드는 스프링mvc의 DefaultServletHandlerConfigurer 클래스를 참조하면 좋을 듯 하다. ps. 기존에 톰캣과 같은 서블릿 컨테이너는 기본으로 제공하는 서블릿이 있다. 바로 default servlet이다. (default servlet of tom..
DispatcherServlet 스프링 MVC가 제공하는 servlet 중에 DispatcherServlet이라는 클래스가 있다. 이 클래스는 스프링 MVC 프레임워크의 가장 중요한, 핵심이되는 클래스라고 해도 과언이 아니니 잘 알아두는 것이 좋다. FrontController 역할을 하는 Servlet 서블릿으로 웹 어플리케이션을 개발할 때 보편적으로 여러 url을 처리하는 서블릿을 여러개 만들어서 매핑한다. 이런식으로 해도 요청을 처리하는 것에는 문제없지만 처리할 요청이 늘어날 수록 서블릿을 더 만들어야 할 수도 있다. 서블릿을 만들면 서블릿 컨테이너에 등록해줘야하는데, 부가적인 작업 또한 늘어가고 web.xml과 같은 설정파일은 점점 장황해질 것이다. 이런 단점을 극복하고자 하는 패턴 중 FrontController라는 패턴이 있..
ContextLoaderListener 스프링에서 제공하는 클래스 중에서 ContextLoaderListener가 있다. 이 클래스는 ContextLoader와 ServletContextListener를 상속하고 있다. 그렇다. 이 클래스의 역할은 ServletContextListener로서 서블릿 컨텍스트의 특정 이벤트를 감지해서 ContextLoader로서 Application context를 로딩한다. 실제로 서블릿 컨테이너가 초기화 될 때 (서블릿 컨테이너가 구동될 때) 그 생명주기에 맞게 application context를 만들어서 Servlet Attribute로 등록하고, 제거하게된다. 이렇게 등록된 Servlet Attribute는 모든 서블릿이 접근할 수 있다. 이렇게 공통적으로 접근할 수 있는 application cont..