Print
카테고리: [ Development ]
조회수: 8409

1. 개요

오늘은 DispatcherServlet에 대해 알아보자.


2. DispatcherServlet

예전에(물론 지금도) web.xml에 servlet mapping 설정이 있었다. 떄로는 아주 많이..

하지만 스프링 시대에서는 그럴 일이 별로 없다. 어떻게 보면 web.xml의 역할이 많이 축소되었다고도 할 수 있다.

앞서 우리가 만든 프로젝트를 기준으로 보자.

2-1. WEB-INF/web.xml

servlet mapping 정보가 있다.

   <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

servlet mapping 정보가 1개 있다.이름은 appServlet, servlet-class는 DispatcherServlet이다. 그리고 appServlet에 맵핑되는 url-pattern은 / 이다. 즉 모든 요청을 DispatcherServlet이 받겠다는 말이다.

2-2. HandlerMapping


3. Resource Mapping

3-1. 이미지 추가

모든 요청을 DispatcherServlet이 받고 있다. 그런데 이미지 등의 static resource가 있다. 어떻게 해야 할까? 

일단 time.jsp에 아래 내용을 추가해보자.

<img src="/img/title-img.jpg"/>"

title-img.jpg 라는 파일을 보여주겠다는 HTML 태그이다.

그리고 우리 테스트 프로젝트 기준으로 src/main/webapp/resources 하위에 img 디렉토리를 만들고 아무 이미지나 title-img.jpg 라는 이름으로 넣어보자. 결론적으로 말하면 src/main/webapp/resources/img/title-img.jpg 라는 파일이 있어야 되는 것이다.

이제 http://localhost:8080/myfirst/time.do 를 호출한다.

결과는...

엑박이 나와야 한다.

현재 상태로는 단지 리소스 폴더 아래 어딘가에 title-img.jpg 파일을 넣어둔 것뿐, DispatcherServlet이 처리할 방법이 없다. 그럼 어떻게 해야 할까?

3-2. <resources mapping=

WEB-INF/spring/appServlet/servlet-context.xml 파일을 연다. 그러면 이런 내용이 있는데..

   <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

긴말할 것 없다. 이걸 추가한다.

   <resources mapping="/img/**" location="/resources/img/" />

그리고 다시 http://localhost:8080/myfirst/time.do 를 호춣해보자.

3-3. 정리

이런 식으로 활용 가능한 것이다.

<resources mapping="/css/**" location="/resources/css/" />
<resources mapping="/images/**" location="/resources/images/" />
<resources mapping="/js/**" location="/resources/js/" />
<resources mapping="/resources/**" location="/resources/" />