목차

Spring MVC

<mvc:resources>

아래와 같은 형태로 정적 파일을 제공해 줄 수 있다. 정적 리소스의 경로는 /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:default-servlet-handler/>

일단 DispatcherServlet을 그냥 /에 매핑한다. jsp와 같은 특정 확장자를 가진 URL말고는 모두 DispatcherServlet이 다 받는다. 일단 스프링의 기본 등록된 핸들러 매핑 전략을 이용해서 컨트롤러를 매핑해본다. @Controller가 담당하는 URL이라면 그리로 넘어갈거고. 그런데 그러다보면 /js/jquery.js 처럼 컨트롤러에 매핑안되는 URL이 나올 것이다. 이런 나머지 모든 URL은 <mvc:default-servlet-handler/>이 내부적으로 등록해주는 DefaultServletHttpRequestHandler이 담당한다. 이 핸들러(컨트롤러)는 /**로 매핑되어있다. 대신 핸들러 매핑 우선순위가 가장 낮다. 따라서 애노테이션 매핑 등등을 거쳐서 다 실패한 URL만 넘어온다. 그리고 DefaultServletHttpRequestHandler는 이 요청을 자신이 직접 스태틱 리소스를 읽어서 처리하는 것이 아니라, 원래 서버가 제공하는 디폴트 서블릿으로 넘겨버린다. 그러면 서버의 기본 디폴트 서블릿이 동작해서 스태틱리소스를 처리해버리는 것이다. 일단 스프링이 다 받고 스프링이 처리 못하는 건 다시 서버의 디폴트 서블릿으로 넘긴다는 아이디어이다.

PathVariable 잘림 현상

URL이 두번 반복되고 Controller 매핑을 못찾는 현상

Date / Time 파라미터

CommonRequestLoggingFilter

MdcLoggingInterceptor

AbstractRequestLoggingFilter

Command Object

HttpMessageConverters

기타