아래와 같은 형태로 정적 파일을 제공해 줄 수 있다. 정적 리소스의 경로는 /resources-버전/images/test.gif
형태가 된다.
이 역할을 하는 핸들러는 ResourceHttpRequestHandler 이다.
<mvc:resources mapping="/resources-#{T(static.auto.VersionGenerator).VERSION}/**" location="/WEB-INF/static_resources/" cache-period="캐시초" />
*.ico
파일 처리 못하는 현상은 web.xml
에 ico의 MIME 타입을 지정해주면 된다. java - Spring mvc:resource not finding *.ico files - Stack Overflow 참조
<mime-mapping> <extension>ico</extension> <mime-type>image/vnd.microsoft.icon</mime-type> </mime-mapping>
<mvc:resources>
를 사용할 경우에는 필요없다.DispatcherServlet
이 처리하지 못한 요청을 서블릿 컨테이너의 DefaultServlet에게 넘겨주는 역할을 하는 핸들러이다. [토스3] 스프링 3.0.4 <mvc:default-servlet-handler/>를 이용해서 UrlRewriteFilter없이 깔끔한 URL을 만들기 » Toby's Epril 참조.일단 DispatcherServlet을 그냥 /에 매핑한다. jsp와 같은 특정 확장자를 가진 URL말고는 모두 DispatcherServlet이 다 받는다. 일단 스프링의 기본 등록된 핸들러 매핑 전략을 이용해서 컨트롤러를 매핑해본다. @Controller가 담당하는 URL이라면 그리로 넘어갈거고. 그런데 그러다보면 /js/jquery.js 처럼 컨트롤러에 매핑안되는 URL이 나올 것이다. 이런 나머지 모든 URL은 <mvc:default-servlet-handler/>이 내부적으로 등록해주는 DefaultServletHttpRequestHandler이 담당한다. 이 핸들러(컨트롤러)는 /**로 매핑되어있다. 대신 핸들러 매핑 우선순위가 가장 낮다. 따라서 애노테이션 매핑 등등을 거쳐서 다 실패한 URL만 넘어온다. 그리고 DefaultServletHttpRequestHandler는 이 요청을 자신이 직접 스태틱 리소스를 읽어서 처리하는 것이 아니라, 원래 서버가 제공하는 디폴트 서블릿으로 넘겨버린다. 그러면 서버의 기본 디폴트 서블릿이 동작해서 스태틱리소스를 처리해버리는 것이다. 일단 스프링이 다 받고 스프링이 처리 못하는 건 다시 서버의 디폴트 서블릿으로 넘긴다는 아이디어이다.
@RequestMapping(“/{value:.+}”)
형태. “:” 뒤에 정규표현식 넣는 것임.<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="useDefaultSuffixPattern" value="false" /> </bean>
/api/resources/1
로 요청을 보냈는데 No mapping found for HTTP request with URI [/api/resources/1/api/resources/1] in DispatcherServlet with name 'servlet
' 같은 오류가 발생했다면 이는 @ResponseBody
를 지정하지 않고 View가 아닌 일반 객체를 리턴했기 때문이다.@RequestParam(value = "registerDate") @DateTimeFormat(pattern = "yyyy/MM/dd") Date registerDate
@RequestParam
를 나열하기 보다는 이를 한 묶음으로 한 클래스 객체를 만드는게 낫다.