<url-pattern>/*</url-pattern>
/*
서블릿에는 기본 서블릿과 JSP 서블릿으로 servletcontainer에서 제공하는 모든 서블릿을 포함하여 다른 모든 서블릿을 재정의합니다. 당신이 요청한 것이 무엇이든, 그것은 그 서블릿에서 끝날 것입니다. 따라서 이는 서블릿에 잘못된 URL 패턴입니다. 일반적 /*
으로 한 Filter
가지만 사용하고 싶습니다 . 를 호출하여 요청이보다 구체적인 URL 패턴을 수신하는 서블릿을 계속하도록 할 수 FilterChain#doFilter()
있습니다.
<url-pattern>/</url-pattern>
는 /
다른 서블릿을 대체하지 않습니다. 등록 된 다른 서블릿과 일치하지 않는 모든 요청에 대해서만 서블릿 컨테이너의 내장 기본 서블릿을 대체합니다. 이는 일반적으로 정적 자원 (CSS / JS / image / etc) 및 디렉토리 목록에서만 호출됩니다. 서블릿 컨테이너의 내장 기본 서블릿은 HTTP 캐시 요청, 미디어 (오디오 / 비디오) 스트리밍 및 파일 다운로드 이력서도 처리 할 수 있습니다. 일반적으로 기본 서블릿을 재정의하고 싶지는 않습니다. 그렇지 않으면 모든 작업을 처리해야합니다. 정확하지는 않습니다 (JSF 유틸리티 라이브러리 OmniFaces 에는 오픈 소스 예제가 있습니다)). 따라서 이는 서블릿의 잘못된 URL 패턴이기도합니다. JSP 페이지가이 서블릿에 도달하지 않는 이유는 서블릿 컨테이너의 내장 JSP 서블릿이 호출되기 때문입니다. 이는 기본적으로보다 구체적인 URL 패턴에 이미 맵핑되어 *.jsp
있습니다.
<url-pattern></url-pattern>
그런 다음 빈 문자열 URL 패턴도
있습니다. 컨텍스트 루트가 요청 될 때 호출됩니다. 이는 <welcome-file>
하위 폴더가 요청 될 때 호출되지 않는 접근 방식 과 다릅니다 . 이것은 " 홈 페이지 서블릿 " 을 원할 경우 실제로 찾고있는 URL 패턴 일 가능성이 높습니다 . 나는 빈 문자열 URL 패턴
과 슬래시 URL 패턴 /
이 다른 방식으로 정확하게 정의 될 것으로 직관적으로 기대한다는 것을 인정해야 하므로 많은 초보자가 이것에 대해 혼란스러워했다는 것을 이해할 수 있습니다. 그러나 그것이 바로 그 것입니다.
전면 컨트롤러
경우 당신이 실제로 프론트 컨트롤러 서블릿을하고자하는, 당신은 최고의 같은보다 구체적인 URL 패턴에 매핑 거라고 *.html
, *.do
, /pages/*
, /app/*
, 등 당신은 일반적인 URL 패턴의 전면 컨트롤러 URL 패턴과 커버 정적 자원을 멀리 숨길 수 있습니다 같은 /resources/*
, /static/*
등 서블릿 필터의 도움으로. / *에 맵핑 된 프론트 컨트롤러 서블릿이 정적 자원을 처리하지 못하게하는 방법을 참조하십시오 . Spring MVC에는 내장 정적 리소스 서블릿이 있으므로 /
Spring에서 정적 리소스에 대한 공통 URL 패턴을 구성하면 프론트 컨트롤러를 매핑 할 수 있습니다 . Spring MVC에서 정적 컨텐츠를 처리하는 방법을 참조하십시오 .