2011-01-25 2 views
7

나는이 하나의 매핑을Jetty의 서블릿 매핑에 일반 표현식을 사용할 수 있습니까?

<servlet-mapping> 
<servlet-name>service</servlet-name> 
<url-pattern>/service/*</url-pattern> 
</servlet-mapping> 

을 가지고 있지만 나 또한 /서비스/마스터 마스터 서블릿에 매핑 할.

<servlet-mapping> 
<servlet-name>master</servlet-name> 
<url-pattern>/service/master</url-pattern> 
</servlet-mapping> 

/service/*를 호출하면 서비스 서블릿이 바로 실행되기 때문에 여기에 충돌이 있다고 생각합니다. 서블릿 매핑에서 어떤 종류의 배제를 사용하는 방법이 있습니까, 아니면 내가하고 싶은 것을하기 위해 정규 표현식이 될 수 있습니까?

답변

6

서블릿 매핑은 항상 가장 구체적인 일치를 사용하므로 경로는 항상 master으로 매핑됩니다.

이것은 Servlet 3.0 spec에서 매핑의 첫번째 규칙은 :

  1. 컨테이너는 서블릿의 경로로 요청 의 경로의 정확한 일치를 찾기 위해 노력할 것입니다. 성공적인 일치는 서블릿을 선택합니다.
  2. 컨테이너는 재귀 적으로 가장 긴 경로 접두어와 일치 시키려고 시도합니다. 이 은 '/' 문자를 경로 구분자로 사용하여 디렉토리 트리 을 한 번에 하위 단계로 이동하여 수행됩니다. 가장 긴 일치는 서블릿 을 선택합니다.
  3. URL 경로의 마지막 세그먼트에 확장자 (예 : .jsp)가있는 경우 서블릿 컨테이너는 확장 프로그램 요청을 처리하는 서블릿과 일치하도록 을 시도합니다. 확장자는 마지막 '.' 문자 뒤의 마지막 세그먼트 의 일부로 정의됩니다.
  4. 위의 세 규칙 중 어느 것도 서블릿과 일치하지 않으면 컨테이너는 요청한 리소스에 적합한 콘텐츠를 제공하려고 시도합니다. "기본"서블릿이 애플리케이션에 대해 으로 정의 된 경우 을 사용합니다. 많은 컨테이너는 콘텐츠를 제공하기 위해 암시 적 기본 서블릿을 제공합니다.
+0

그래서 내가 갖고있는 매핑이 정확하다고 말하고 있습니까? 글쎄, 난 그것을 시도하고/서비스/마스터 마스터 서블릿에 매핑되지 않습니다 – denniss

+0

다른 컨테이너를 사용해보십시오. 수코양이. 나는 종종 부두와 같은 이상한 것을 보았다. – BalusC

+0

해결 방법으로 마스터 매핑을 먼저 시도해보십시오 (테스트하지는 않았지만이 방법이 작동 할 수있는 가능성이 있다고 가정합니다). –

1

Google Guice를 사용해 볼 수 있습니다. com.google.inject.servlet.ServletModule.serveRegex (String regex, String ... regexes) 을 사용하면 매핑에서 정규 표현식을 사용할 수 있습니다.

여기를 참조하십시오. http://code.google.com/p/google-guice/wiki/ServletModule

관련 문제