2009년 8월 21일 금요일

Tomcat에서 static 파일들을 제공하는 방법

Spring 3.0의 새로운 REST 방식 컨트롤러를 이용하기 위해서 가장 간단한 방법으로는 dispatcher servlet을 다음과 같이 맵핑을 하는 방식을 택하였다.

   1: <servlet>
   2:     <servlet-name>dispatcher</servlet-name>
   3:     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   4: </servlet>
   5: <servlet-mapping>
   6:     <servlet-name>dispatcher</servlet-name>
   7:     <url-pattern>/</url-pattern>
   8: </servlet-mapping>

이 맵핑의 큰 문제점 중 하나는 개발할 당시에는 보통 apache + tomcat 형태를 이용하지 않고 tomcat만으로 구성하여 개발을 하는데 static한 파일들을 모두 dispatcher servlet이 가져간다는 문제가 있다. 그래서 검색을 좀 해보니 다음과 같은 해결책이 있었다.

   1: <servlet-mapping>
   2:     <servlet-name>default</servlet-name>
   3:     <url-pattern>*.css</url-pattern>
   4: </servlet-mapping>
   5: <servlet-mapping>
   6:     <servlet-name>default</servlet-name>
   7:     <url-pattern>*.js</url-pattern>
   8: </servlet-mapping>
   9: <servlet-mapping>
  10:     <servlet-name>default</servlet-name>
  11:     <url-pattern>*.jpg</url-pattern>
  12: </servlet-mapping>
  13: <servlet-mapping>
  14:     <servlet-name>default</servlet-name>
  15:     <url-pattern>*.png</url-pattern>
  16: </servlet-mapping>

이런 식으로 필요한 확장자에 대해서 default servlet으로 처리하도록 하면 된다. 혹시나 default servlet의 존재에 대해서 궁금하다면 default servlet의 정의는 %TOMCAT_HOME%\conf\web.xml에 정의되어 있다.

댓글 2개:

  1. http://www.gridshore.nl/2009/06/26/serving-static-files-in-google-app-engine-development-edition/



    여기 보니 <url-pattern>에 그냥 *.css,*.js 와 같이 ,로 구분하여 맵핑도 가능합니다.

    답글삭제
  2. 막상 해보니 , 로 구분해서는 안되네요. 그래서



    <servlet-mapping>

    <servlet-name>default</servlet-name>

    <url-pattern>*.js</url-pattern>

    <url-pattern>*.css</url-pattern>

    <url-pattern>*.jpg</url-pattern>

    <url-pattern>*.png</url-pattern>

    <url-pattern>*.xml</url-pattern>

    </servlet-mapping>



    이런 식으로 수정.

    답글삭제