2012-03-23 3 views
1

경로에 특수 문자 (예 : ; , . /)가 포함 된 URL을 처리해야하는 사용자 정의 프록시 서블릿이 있습니다. 이는 설계 상 추한 경로 매개 변수를 가진 RESTful 응용 프로그램이기 때문입니다. (그것은 내 아니므로 그것을 언급하지 마십시오.)HttpRequest 객체에서 이스케이프 처리되지 않은 서블릿 경로 얻기

내 클라이언트를, (실제로 wget를, 브라우저에서 URL을 이스케이프 보여 경향이 있기 때문에)이 URL에 대한 요청을 보내 : 내 서블릿에서

http://localhost:8080/MyApplication/proxy/foo/ugly%3Apart%2Fcomes%3Bhere/children 
//note: %2F = '/', %3A = ':', %3B = ';' 

http://localhost:8080/MyApplication/proxy/foo/ugly:part/comes;here/children

따라서에서 : 나는 GET 요청을 전달하려고 할 때, 나는 HttpRequest.getPathInfo()가 나에게 URL의 이스케이프를 반환하기 때문에 그것을 재구성 드릴 수 없습니다 (/proxy/*에 매핑) 이 중 /;이 원래 이스케이프 처리되었거나 이스케이프 처리되지 않은 구성은 손실됩니다. 그리고 그것은 저에게 차이를 만듭니다. 내 URL을 소위 행렬 URL (http://www.w3.org/DesignIssues/MatrixURIs.html 참조)로 만들거나 모든 REST 경로 매개 변수를 슬래시로 이동하십시오.

실제로 Glassfish 서버에서이 문제점을 발견했습니다. 따라서 다른 응용 프로그램 서버가 다르게 처리하는지 여부는 확실하지 않습니다. 나는 서블릿 API 만이 발견 :

대해 getPathInfo()이 Request를 작성했을 때에 클라이언트가 보낸 URL과 관련된 추가 경로 정보를 반환합니다.

클라이언트가 보낸 이스케이프 처리되지 않은 원본 요청 URL을 어떻게 얻을 수 있습니까?

답변

관련 문제