"서블릿 매핑 규칙"과 "필터 순서 정하기 규칙"
둘 다 web.xml과 관련이 있는 것인데 '서블릿 매핑 규칙'은 /* 와 /foo 로 서블릿 매핑이 되어 있을 때 만약 http://springsprout.org/foo 라는 요청이 왔을 때 /*로 매핑되어 있는 서블릿으로 갈 것이냐... /foo로 매핑되어있는 서블릿으로 갈것이냐와 관련이 있는 규칙입니다. web.xml에 설정되어 있는 순서에 따라 달라질까요? 글쎄요..ㅋ
'필터 순서 정하기 규칙'은 위와는 다릅니다. 서블릿 매핑은 결국 어떤 것 하나를 선택하는 문제지만 이건 여러 개가 선택되어도 문제가 없기 때문이죠. 대신 그들 사이의 순서가... 중요할 수도 있을텐데 그 순서가 어떻게 정해지는지 이해해야될 것 같습니다. (스프링처럼 Ordered 인터페이스를 적용해 줄 것이지 복잡하게 이게 뭐람 @_@)
서블릿 매핑 규칙(헤드 퍼스트 서블릿과 JSP 영문판 2판 619 페이지)
1. 먼저 요청한 URL과 정확히 일치하는 매핑을 찾습니다. 그게 없다면 디렉토리가 일치하는 매핑을 찾습니다. 그게 없다면 확장자가 일치하는 매핑을 찾습니다.
2. 만약 요청이 여러 개의 디렉토리 매핑 <url-patterm> 과 일치하다면, 그 중에서 가장 긴 매핑을 선택합니다. 예를 들어 /foo/bar/myStuff.do 요청이 왔을 때 /foo/bar/* 매핑이 /foo/* 매핑을 이기게 됩니다. 가장 구체적인 것이 위너가 됩니다.
필터 순서 정하기 규칙(헤드 퍼스트 서블릿과 JSP 영문판 2판 710 페이지)
1) 해당 URL 패턴에 대응하는 모든 필터는 DD(보통 web.xml)에 정의되어 있는 순서대로 체인에 놓는다. 즉 필터 선언 중 <url-pattern>을 사용하여 해당 순서대로 필터를 놓는다.
2) 위 과정이 끝난 뒤 <servlet-name>에 대응하는 것들을 DD에 정의되어 있는 순서대로 그 뒤에 이어서 놓는다.
해당 페이지에 퀴즈도 있으니 풀어보시면... 재미납니다.ㅋ