webapps의 Tomcat 7 후행 슬래시 문제


13

최근에 Tomcat 서버를 6.x 버전에서 최신 7.x 버전으로 업그레이드했습니다.

나는 도움을 받기를 바라면서 작은 어려움을 겪었습니다.

MyApp을 호출하는 응용 프로그램이 있습니다

tomcat6에서 http://www.example.com/MyApp/page/에 갔을 때 일반적으로 원하는 결과를 얻었습니다.

이제 tomcat7에서 동일한 정확한 URL을 방문합니다 (후행 슬래시 포함) .Tomcat은 / MyApp / page /가 요청 이름 대신 전체 webapp 이름이라고 생각하기 때문에 "자원을 사용할 수 없습니다"라는 오류가 발생합니다. 페이지는 MyApp 웹앱 아래에 있습니다.

그렇지 않으면 "HTTP 상태 405-요청 방법 'GET'이 지원되지 않습니다"라는 오류가 발생하기 때문에 URL 끝에 슬래시가 필요합니다. "페이지"요청에 대해 GET 메소드를 실제로 허용하지 않았기 때문에 OK입니다. .

누군가가 기존 웹 응용 프로그램의 경로 후 슬래시를 새 웹 응용 프로그램으로 리디렉션하는 것을 전체 "문자열"이라고 부르고 tomcat6과 같은 요청을 처리해서는 안된다고 Tomcat에 알리는 방법을 알고 있다면 좋을 것입니다!


web.xml매핑 된 기본 서블릿 이 /*있습니까? 그렇지 않으면 tomcat은 welcome-file-list를 사용합니다. 일반적으로 첫 번째 경로 세그먼트 만 컨텍스트 루트로 해석됩니다. 따라서 웹 응용 프로그램을 찾는 것이 문제가되지 않는 것 같습니다.
마나

첫 번째 경로 세그먼트는 컨텍스트 루트이며 실제로 작동하지만 찾아냅니다. 그러나 첫 번째 경로의 일부가 아닌 다음 경로는 모든 경로가있는 webapp에 대한 Tomcat 검색입니다. 기본값이 아닙니다 ..

나는 당신이 말하는 것을 실제로 얻지 못합니다. 죄송합니다. 이름으로 webapp를 구성한 경우 MyApptomcat은 나머지 경로를 사용하여이 웹 응용 프로그램 컨텍스트를 사용합니다 page/. 그렇지 않은 경우 ROOT전체 경로를 사용하여 컨텍스트 를 찾습니다 .
마나

웹앱에서 MyApp을 호출하고 example.com/MyApp 이 작동하지만 MyApp에서 foo 컨텐츠를 찾는 대신 example.com/MyApp/foo 를 방문 하면 웹앱에서 "MyApp / foo /"를 검색하고 찾지 않습니다. MyApp의 콘텐츠는 foo ..

2
이것을보십시오 : stackoverflow.com/q/11055608/1031900

답변:


1

고대의 질문이지만 최근 Tomcat 8에서 종료 슬래시와 싸웠 기 때문에 슬래시 문제가 Tomcat 사용자 세계를 계속 괴롭 히고 있음을 알고 있습니다. :-)

루트 컨텍스트를로드 할 때 Tomcat이 리디렉션을 처리하는 방식이 변경되었습니다. 버그 58660을 확인하고 개발자의 토론 내용을 읽어보십시오. mapperContextRootRedirectEnabledContext요소 속성을 수정하여 기본 매퍼를 해제해야 할 수도 있습니다 conf/context.xml.


0

환영 파일 목록을 확인하십시오 .. 추후 내용은 추측입니다 ...

문제의 본질은 Tomcat에 /가 표시 될 때 믿습니다.-몇 가지 옵션이 있습니다.-환영 파일 목록을 반복하십시오.-존재하지 않는 곳-디렉토리 목록 표시 (활성화 된 경우)

여기에 재미가 시작됩니다 ... 많은 사람들이 스트럿과 같은 것들에 * .do를 사용하고 싶어합니다. 그래서 그들은 index.do가 홈페이지가되기를 원합니다. 또는 * .jsp가 JspServlet에 매핑되는 index.jsp도 일반적입니다.

재미있는 일이 있습니다. 환영 파일이 index.jsp, index.do라고 가정하십시오.

Tomcat (IIRC)이하는 일은 먼저 해당 이름의 리소스를 찾는 시작 파일 목록을 반복하는 것입니다.

그런 다음 일치하는 매핑을 찾기 위해 두 번째 패스를 수행합니다. 따라서 환영 목록에 index.jsp가 지정되고 * .jsp가 맵핑되는 경우. 그런 다음 tomcat은 index.jsp로 전달하려고 시도하고 404를 얻습니다.

서블릿 매핑과 환영 파일 겹침이 있다고 생각합니다. 그리고 해당 서블릿의 동작은 GET을 지원하지 않습니다. (따라서 405)


0

프로젝트가 v2.2의 동적 웹 모듈을 사용하는 경우 WebContent의 web.xml (예 : index.html)에 존재하는 적어도 하나의 파일 (빈 html 파일 일 수 있음)을 명시 적으로 작성해야합니다.


1
이것은 주석입니다. 대답이 아닙니다. 더 많은 포인트를 얻으면 나중에 의견을 말하십시오. 감사
흐르 보예 Špoljar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.