Dev/Spring Framework

[퍼옴/메모] 정적 리소스(js, css, image..) 접근

Fehoon- 2018. 6. 19. 21:35

출처: http://leegaworld.tistory.com/360 [밍깅료의 블로그]


Spring Web 프로젝트에서 정적 리소스(js, css, image ...) 를 사용하기 위해서는 보통 /src/main/webapp/resources 위치에 생성 한다고 한다.

webapp/ 밑에 위치해서 URI 상으로도 접근이 가능하기 때문에 아래와 같은 방법으로 해당 리소스들에 대한 접근이 가능하다.

<link href="<c:url value='/static/css/bootstrap.css' />"  rel="stylesheet" />

<link href="${pageContext.request.contextPath}/static/css/app.css" rel="stylesheet" />

하지만 해당 리소스들을 참조하지 못해 404 에러가 발생할 경우는 web.xml 의 dispatcherServlet 설정을 확인해봐야 한다.

<servlet-mapping>

<servlet-name>dispatcherServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

위와 같이 url-pattern 이 / 로 되어 있을 경우 모든 URI 에 대해 Servlet Mapping (=Controller에 URL Mapping 이 있는지 확인)을 확인하기 때문에 정적 리소스들은 매핑시킬수 없으므로 404가 발생하는 것이다.

해결 방법으로는 url-pattern 을 변경 하던지 아니면, default servlet-mapping 을 시켜주면 된다.

web.xml 에 아래와 같이 설정해준다.

<servlet-mapping>

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

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

    </servlet-mapping>

    <servlet-mapping>

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

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

    </servlet-mapping>

    <servlet-mapping>

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

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

    </servlet-mapping>

위와 같이 설정해 놓으면 dispatcherServlet  은 default Servlet Mapping 을 제외한 나머지 요청에 대해서만 Controller 와 매핑 시킨다.

하지만 이와같이 정적 매소드들에 대해 일일이 열거 하는 것 보다는 Spring 3.x 이상부터 지원되는 <mvc:default-servlet-handler/> 로 대체해서 사용하면 된다.




반응형