[컴][웹] Spring 에서 static content 인식하는 방법

static path / file path / static content / static resources

jsp 에서 상대경로(relative path) 로 값을 지정해 놓은 경우에 제대로 접근이 되지 않는다. 예를 들어 아래와 같은 경우에, BasicProject 에 대한 접근이 되지 않는다.


// BasicProject.jsp
<script language="javascript" src="../../BasicProject/BasicProject.nocache.js"></script>



webapp
 +
 +--- BasicProject
 |
 +--- WEB-INF
         +
         +-----pages
                |
                + BasicProject.jsp
                + BasicProject.css
                + ...
    

왜냐하면, 위의 경로를 설정에 따라 다르겠지만, 나의 경우에는 아래와 같은 URL 로 인식하기 때문이다.
http://localhost:8080/BasicProject/BasicProject.nocache.js

file path 로 인식 하기

이런 문제(?)를 해결하는 방법을 ref.1 에서 잘 설명 해 주고 있다. 이것은 tomcat server 의 설정을 수정해서 해결한다.

spring framework 에서는 기본적으로 spring 의 dispatcher 를 등록한다. 대략 아래와 같이 web.xml 에 등록한다.

<servlet>

   <servlet-name>dispatcher</servlet-name>
   <servlet-class>
     org.springframework.web.servlet.DispatcherServlet
   </servlet-class>

   <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
   </init-param>

   <load-on-startup>1</load-on-startup>
 </servlet>

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


실제 file path 로 인식하기 위해서 이 web.xml 을 수정해 주면 된다. 만약 위의 예제처럼 BasicProject 로 시작되는 URL 을 filepath 로 인식하려고 한다면, 아래처럼 tomcat 의 default servlet 을 사용하면 된다.

// web.xml
<servlet-mapping>

    <servlet-name>default</servlet-name>
    <url-pattern>/BasicProject/*</url-pattern>

</servlet-mapping>


ref. 2 에서 확장자(extension) 을 이용해서 mapping 하는 방법을 제안한다.

// web.xml
<servlet-mapping>

    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>

</servlet-mapping>


mvc:resources

Spring 3.0.5 Release 부터는 새로운 방식이 가능하다. 사용해 보지 않아 잘 모르겠다.
<mvc:resources mapping="/resources/**" location="/public-resources/"/>
webapp/public-resources/ 안에 있는 file 들을
URL : http://localhost/resources/
에 mapping 시켜주는 것이다.


참고로 이 <servlet> 을 설정하는 것은 Spring 의 이야기는 아니다. 하지만 spring framework 가 tomcat 위에 만들어지는 것이라 같이 알아둬야 한다. 그리고 이 부분을 spring 의 부분으로 가져온 것이 <mvc:resource> 부분이라고 할 수 있겠다.



References

  1. HOW TO ACCESS CSS/JS FILES IN JSPS, ALL OF THEM ARE PLACED IN WEB-INF??
  2. Servlet for serving static content
  3. 15.12.4 mvc:resources, Spring Framework Reference

댓글 없음:

댓글 쓰기