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> 부분이라고 할 수 있겠다.
댓글 없음:
댓글 쓰기