출처: 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/> 로 대체해서 사용하면 된다.
'Dev > Spring Framework' 카테고리의 다른 글
mybatis insert 후 바로 해당 id 값 가져오기 (0) | 2018.07.12 |
---|---|
[Spring] Ajax PUT 메소드 (0) | 2018.07.05 |
[퍼옴/메모] 서버 Hot Swapping (0) | 2018.06.19 |
[퍼옴/메모] css,js,img 파일 처리방법들 (0) | 2018.06.19 |
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed (0) | 2018.03.05 |
Spring framework - 인코딩 필터 적용 (0) | 2018.02.09 |
스프링 MVC에서 주로 사용하는 어노테이션 종류 (0) | 2018.02.06 |
스프링(Spring) MVC의 컨트롤러 (0) | 2018.02.06 |