문제

를 쓰려고 노력해요한 웹 응용 프로그램을 사용하여 SpringMVC.일반적으로 난 그냥 지도 몇 만든 파일 확장자면 봄의 앞 컨트롤러와 행복하게 살고 있지만,이번에 나가 나머지 부분과 같은 Url 을 가진 파일 이름 확장자.

매핑의 모든 것을 아래에 나의 컨텍스트의 경로를 앞 컨트롤러(의 call it"")의 관리를해야의 정적 파일도,내가 오히려 하지 않을텐데(유 재발견 또 다른 weel?), 그래서 어떤 조합으로 톰캣의 기본 servlet(의 call it"tomcat")이 나타납니다.

나하가 다음과 같은 작업을 수행

<servlet-mapping>
  <servlet-name>app</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>tomcat</servlet-name>
  <url-pattern>*.ext</url-pattern>
</servlet-mapping>

고 반복되는 후자를 위한 각각의 파일 확장자의 정적 내용입니다.나는 이유를 궁금은 다음과 같은 설정을 자랑합니다,나에게는 동일한 위,작동하지 않습니다.

<!-- failed attempt #1 -->
<servlet-mapping>
  <servlet-name>app</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>tomcat</servlet-name>
  <url-pattern>*.ext</url-pattern>
</servlet-mapping>

<!-- failed attempt #2 -->
<servlet-mapping>
  <servlet-name>app</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>tomcat</servlet-name>
  <url-pattern>/some-static-content-folder/*</url-pattern>
</servlet-mapping>

할 수 있는 사람이 되?

도움이 되었습니까?

해결책

나는 생각 나는 것을 알고 있습니다.

에서 당신의 작업 web.xml 당신이 설정블릿의 기본 servlet(/그 자체가 기본 servlet 호출이 없는 경우 다른 일치),그것이 대답하는 모든 요청에 일치하지 않는 다른 매핑을 사용합니다.

지 1/*매핑 될지 않는 유효한 경로 매핑을 사용합니다.과/*에서 매핑 web.xml 그것은 답이 모든 요청을 제외하고 다른 경로에 매핑됩니다.사양에 따라 확장 매핑은 암시적 매핑을 덮어쓰에 의해 명시적으로 매핑됩니다.그 이유는 확장자를 매핑하지 못했습니다.모든 것이 명시적으로 매핑되는 앱입니다.

에 실패했습 2,응용 프로그램에 대한 책임 모든 것을 제외하고,내용과 일치하는 정적 컨텐츠를 매핑을 사용합니다.이 무엇인지를 보여주에서 일어나는 빠른 테스트가 설정합니다.여기에는 예입니다. /some-static-content-folder/ 담고 test.png

액세스하려는 시험입니다.png 했:

/some-static-content-folder/test.png

와 파일을 찾을 수 없습니다.그러나 노력

/some-static-content-folder/some-static-content-folder/test.png

그것입니다.그래서 그것은 보인다는 Tomcat 기본 servlet(6.0.16 에서 이상)방 servlet 매핑을 찾기 위해 노력할 것입니다 이 파일을 사용하여 나머지 경로입니다.에 따라 이 게시물 블릿 제공을 위해 정적 컨텐츠 부두에게 동작하고 있었습니다.

은 거기에 몇 가지 이유로 당신이 할 수 없는 무언가 다음과 같 지도 루트 디렉토리지에 호출합니다.응용 프로그램 같은 것을 매핑/rest_root/*보다 당신은 아무것도에 대한 책임을에서 일어나는 rest_root 폴더에,하지만 다른 곳에서 처리해야 합니다 Tomcat 지 않는 한,당신은 또 다른 명시적 매핑을 사용합니다.나는 설정 제안의 나머지 servlet 경로를 매핑하기 때문에,그것은 선언하는 의도 나.를 사용하여/또는/*보이지 않는 적절한 가지고 있기 때문에 당신이 지 예외가 있습니다.를 사용하여 그래서 예를 들어,내 나머지를 매핑을 것 같은 뭔가

/users/*사용자를 위한 서블릿

게/*는 게시물에 대한블릿

매핑하기 위해

  1. 명시적으(경로 매핑을)
  2. 암시적(확장자 매핑을)
  3. 기본(/)

정하시기 바랍니는 아무것도 나는 잘못입니다.

다른 팁

참고로 "실패한 시도 #2"는 Tomcat> = ~ 6.0.29의 버전에서 완벽하게 정확합니다.

버전 6.0.29에서 고정 된 Tomcat 버그의 결과였습니다.

https://issues.apache.org/bugzilla/show_bug.cgi?id=50026

<!-- Correct for Tomcat >= 6.0.29 or other Servlet containers -->
<servlet-mapping>
  <servlet-name>app</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/some-static-content-folder/*</url-pattern>
</servlet-mapping>

나는 이런 식으로 서블릿을 매핑하려고 시도한 적이 없지만 나는 ~일 것이다 동일한 문자가 두 경기에 모두 사용 되더라도 /*는 기술적으로 /*로 시작하고 /*로 끝납니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top