2014-04-07 3 views
1

패턴 겹침과 함께 3 개의 서블릿을 구현해야합니다. 이런 패턴중첩 패턴을 가진 서블릿

/context/categories 

: 제 서블릿이 예를 들면 취급 할

@WebServlet("/categories")) 

예컨대 처리 할 제 서블릿 :

/context/categories/category1/ 

위트 하 이런 패턴 :

@WebServlet("/categories/*") 

그리고 세 번째처럼 될 것이다 :

/context/categories/category1/category1contentname 

하지만 난 두 번째 서블릿이 호출을 잡을 것 때문에, 세 번째에 적절한 패턴을주지, 또는 둘 다 질수 의지. 제 질문은 서블릿에 올바른 패턴을 줄 수있는 방법입니다. 특히 두 번째와 세 번째 패턴이 무엇입니까? 나는 * 접미사와 *를 알고있다. 접두사,하지만 지금까지 제대로 작동하지 않습니다.

+0

서블릿 매핑 순서를 정의 할 수 있으므로 주석 대신 web.xml 선언을 사용해보십시오. –

답변

1

나는

/context/categories/category1/ 

당신이 /category1 경로 세그먼트가 어떤 값을 가질 수 있다는 것을 의미한다고 가정합니다.

기본적으로 서블릿 url-pattern 요소를 사용할 수 없습니다.

서블릿에 매핑에 사용되는 경로는 요청 객체를 뺀 컨텍스트 경로와 경로 매개 변수에서 요청 URL 경우 : Servlet Specification는 경로 매칭에 대해 다음과 말한다. 아래의 URL 경로 매핑 규칙은 순서대로 사용됩니다. 첫 번째 성공 경기는 시도 더 이상의 경기와 함께 사용됩니다

  1. 컨테이너는 서블릿의 경로에 대한 요청의 경로의 정확한 일치를 찾기 위해 노력할 것입니다. 성공적으로 일치하면 서블릿이 선택됩니다.
  2. 컨테이너는 재귀 적으로 가장 긴 경로 접두어와 일치 시키려고 시도합니다. '/'문자를 경로 구분 기호로 사용하여 디렉토리 트리를 한 번에 단계별로 내리면됩니다. 가장 긴 숫자 인 은 선택한 서블릿을 결정합니다.
  3. 는 [...]
  4. 는 [...]

매핑은

@WebServlet("/categories/*") 

/categories로 시작하는 모든 일치합니다.

내가보기에 많은 솔루션이 없습니다.패턴 /categories/*을 사용하여 단일 Servlet을 선언하고 내부적으로 파견을 수행하십시오. Front Controller pattern을 조사해야합니다.

+0

고마워요! 몇 시간이 지난 후에, 나는 당신이 쓴 것처럼 똑같은 대답을했습니다. 그런 식으로 작동하지 않아 서블릿 경로를 다른 것으로 바꿨습니다. 하지만 고맙습니다. :) – BmxBandita

관련 문제