У меня есть собственный прокси-сервлет, который имеет дело с URL-адресами, которые содержат специальные символы (например, ; , . /
в своем пути). Это потому, что это RESTful-приложение, которое имеет уродливые параметры пути. (Не комментируйте это, поскольку это не мое.)
Мой клиент (на самом деле wget
, потому что браузеры обычно показывают неэкранированный URL) отправляет запрос на этот URL:
http://localhost:8080/MyApplication/proxy/foo/ugly%3Apart%2Fcomes%3Bhere/children
//note: %2F = '/', %3A = ':', %3B = ';'
В моем сервлете (сопоставленном с /proxy/*
), когда я пытаюсь переслать запрос GET, я не могу восстановить его, потому что HttpRequest.getPathInfo()
возвращает мне URL без выхода:
http://localhost:8080/MyApplication/proxy/foo/ugly:part/comes;here/children
И, следовательно, информация о том, какие /
s и ;
s были первоначально сбежали или не спаслись, теряется. И это имеет значение для меня, например; делает мой URL так называемым матричным URL, см. http://www.w3.org/DesignIssues/MatrixURIs.html, или все параметры пути REST сдвигаются косыми чертами.
На самом деле я обнаружил эту проблему на сервере Glassfish, поэтому я не уверен, что разные серверы приложений относятся к этому по-разному или нет. Я нашел только это в Servlet API:
getPathInfo () Возвращает любую дополнительную информацию о пути, связанную с
URL, который отправил клиент, когда он сделал этот запрос.
Как я могу получить исходный, неэкранированный URL-адрес запроса, который был отправлен клиентом?