본문 바로가기
JAVA/Spring

Spring MVC - 기본설정(3)

by 플람 2020. 3. 6.

저번시간에는 HandlerInterceptor에 대해서 알아보았다.

 

WebApplicationContext 계층부터 알아보려고 한다.

 

DispatcherServlet은 그 자체가 서블릿이기 때문에 한 개 이상의 DispatcherServlet을 설정하는 것이 가능하다.

 

이 책의 예제에서는 front와 rest의 dispatcherServlet으로 나누었다.

 

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/service.xml, /WEB-INF/persistence.xml</param-value>
</context-param>

<listner>
    <listner-class>
     org.springframework.web.context.ContextLoaderListener
    </listner-class>
</listner>

<servlet>
    <servlet-name>front</servlet-name>
    <servlet-class>
    	org.springframework.web.servlet.DispactcherServlet
    <servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/front.xml</param-value>
    </init-param>
</servlet>

<servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>
    	org.springframework.web.servlet.DispactcherServlet
    <servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/rest.xml</param-value>
    </init-param>
</servlet>

 

DelegatingFilterProxy에 대한 이야기도 나왔지만 이건 springsecurity의 영역이니 다음에 다시 설명하려고 한다.

 

이제 핸들러, 핸들러맵핑, 핸들러어뎁터에 대한 이야기다.

 

dispatcherServlet은 컨트롤러를 직접 수행하지 않는다.

 

항상 HandlerAdapter를 이용하여 간접적으로 실행하고 있다.

 

이 책에서는 이렇게 말한다.

 


 DispatcherServlet은 웹 요청을 실제로 처리하는 객체의 타입을 @Controller 애노테이션을 구현한 클래스로 제한하지 않는다. 실제로 거의 모든 종류의 객체로 웹 요청을 처리 할 수 있다. 그래서 웹 요청을 처리하는 객체를 좀 더 범용적인 의미로 핸들러 라고 부른다.


즉 modelAndView만 리턴하면 올바르게 동작한다고 한다.

하지만 String으로 변환하면? 아마 DispacherServlet은 modelAndView가 없어서 안될 것이다. 이 String 타입을 변환시켜주는 녀석이 바로 HandlerAdapter이다.

 

그.. 우리가 지금까지

 

<mvc:annotation-driven/> 그리고 <mvc:default-servlet-handler/> 을 항상 넣었을 것이다.

 

mvc:annoation은 handlerMapping과 HandlerAdapter를 등록한다.

 

defaultServletHandler는 defaultServletHttpRequestHandler, SimpleUrlHandlerMapping을 등록한다.

 

 

'JAVA > Spring' 카테고리의 다른 글

Spring MVC - XML/JSON  (0) 2020.03.06
Spring MVC - ViewResolver  (0) 2020.03.06
Spring MVC - 기본설정(2) 및 HandlerInterceptor  (0) 2020.03.05
spring MVC - validator와 Errors  (0) 2020.03.03
Spring MVC - dispatcherServlet의 url-pattern  (0) 2020.03.03