파게로그

[Spring MVC] 정적인 리소스 서비스하기 본문

콤퓨타 왕기초/Spring

[Spring MVC] 정적인 리소스 서비스하기

파게 2021. 4. 26. 11:35

Spring은 기본적으로 JSP 등 동적인 페이지와는 달리 HTML, CS, JavaScript 등 정적인 리소스에 대한 접근을 막는다. 정적인 리소스를 서비스해야 한다면 dispatcher-servlet.xml에 <mvc:resources>를 추가함으로써 접근을 허용할 수 있다.

 

dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http:www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           https://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/mvc
                           https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <bean name="/index" class="com.ddoongi.web.controller.IndexController" />
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    <mvc:resources location="/resource/" mapping="/resource/**"></mvc:resources>
</beans>

 

mvc 사용을 위해 네임스페이스와 스키마를 추가해주고, <mvc:resources>를 통해 접근을 허용해준다. 여기서 '**'은 하위 폴더 아래의 파일까지 모두 포함함을 의미한다.

 

 

<mvc:resources location="/images/" mapping="/images/**" />

<mvc:resources location="/js/" mapping="/js/**" />

<mvc:resources location="/css/" mapping="/css/**" />

 

이런 걸 모두 모아서 resource에 넣고 아래와 같이 사용할 수 있다.

 

<mvc:resources location="/resource/ mapping="/resource/**" />

 

그런데 이렇게 하면 HTML 파일의 <img>의 src 속성에 모두 "/resource/images/logo.png"와 같이, resource를 명시해주어야 하는 불편함이 있다.

 

sol)

 

<mvc:resources location="/static/" mapping="/**" />

또는

<mvc:resources location="/public/" mapping="/**" />

 

뒤지는 곳은 static 폴더이고.. (이게 루트가 됨)

src 같이 해당 파일을 이용하는 곳에서는 static을 생략한다.

 

즉 아래의 URL은 404 에러를 발생시킨다.

localhost:8080/static/images/logo.png

 

따라서 아래와 같이 접근할 수 있도록 해야한다.

localhost:8080/images/logo.png

 

Comments