2018년 4월 5일 목요일

Spring DispatcherSerlvet

DispatcherSerlvet 을 FrontController로 설정하기

  1. WAS는 배포시 처음에 web.xml을 찾는다.(서블릿)
  2.  3.0부터는 javax.servlet.ServletContainerInitializer을 web.xml 을 대신하여 사용할수 있다(서블릿) -> 구현한게 없으면 WebApplicationInitializer 를 찾는다.
  3.  org.springframework.web.WebApplicationInitializer 인터페이스를 구현해서 사용한다 (스프링MVC)(스프링은 이미 ServletContainerInitializer 구현한 클래스를 가지고 있다. )
-> WAS 구동시 classPath에서 WebApplicationInitializer를 구현한 것을 찾는다.
  • 모든 설정은 스프링을 통해서 하라는 의도가 있다.(하지만 그렇게 안해도 된다.)
  • DispatcherSerlvet는 설정파일을 읽어서 메모리에 올려준다.
  • 내부적으로 InternalResourceViewResolver을 호출하는 부분이 있다.
  • 아래의 그림에서 보라색 부분이 개발자가 만드는 부분이다.

DispatcherSerlvet

  • HttpServletRequest, HttpServletResponse, HttpSession 등을 파라미터에 적어주면 dispatcherservlet이 자동으로 값을 넣어주니 필요한 경우에만 사용한다.
  • web.xml 에 <url-pattern>/</url-pattern> 으로 설정이 되어있으면 context root 이하의 모든 요청을 처리하는것을 의미하며 Font Controller이라 부른다.
  • client에서 request하는 content-type 또는 path의 정보의 전략에 따라서 분석을 하여 실행한다.
  • DispatcherSerlvet이  @Controller이 붙어 있는 클래스에서 @GetMapping, @PostMapping, @RequestMapping등 어노테이션을 읽어서 Handler Mapping이라는 객체를 만든다. 설정된 어노테이션에따라 객체가 생긴다. (같은 어노테이션끼리는 같은 path를 가지면 안된다.)
  • Handler Adapter 선택한 Handler Mapping객체를 실행하고 view name을 리턴한다. (스프링은 view를 꼭 jsp 만 쓰는것은 아니다.)
  • View Resolver는 여러개 생길수 있다. context-type에 담긴 형식에 따라서 맞는 view객체를 찾아서 응답해준다.
    ex) client에서 content-type 를 text/hml형식으로 요청했다면InternalResourceViewResolver를 사용한다.
  • DispatcherServlet는 ContextLoaderListener를 부모로 가진다. ContextLoaderListener는 자식에 접근 못한다.
  • DispatcherServlet에서는 프리젠테이션 레이어 처리를 한다. Service, Repository 를 처리한다.
  • DispatcherServlet 끼리는 서로 참조하지 못한다.
    • ContextLoaderListener 구조
      • WebApplicationContext
        • 스프링설정
    • DispatcherServlet -> path : /board
      • WebApplicationContext
        • 스프링설정
    • DispatcherServlet -> path : /shop 
      • WebApplicationContext
        • 스프링설정
Share:

0 개의 댓글:

댓글 쓰기