Сервлет Java getParameter для параметра, который является URL - PullRequest
9 голосов
/ 21 сентября 2010

Я создаю сайт, который отправляет URL сервлету в целях анализа.На стороне клиента я передаю URL как параметр, который закодирован.Например ...

Submit: http://www.site.com
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com

На стороне сервера мой сервлет запрашивает параметр примерно так ...

String url = request.getParameter("url");

Я получаю декодированную строку: http://www.site.com. Пока все хорошо - это работает как ожидалось ... большую часть времени.

Проблема возникает, когда параметр url содержит собственные параметры ...

Submit: http://www.site.com?param1=1&param2=2
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2

На клиентском сайте все в порядке, но в моем сервлете, когда я получаю параметр, я получаю только часть параметра url!

http://www.site.com?param1=1

Он удаляет второй параметр из моего входного параметра url!Я определенно кодирую параметр url перед отправкой его на сервер ... что происходит?

1 Ответ

12 голосов
/ 21 сентября 2010

Я не могу воспроизвести вашу проблему на Tomcat 6.0.29.Там больше в вопросе.Может быть, фильтр в цепочке, который что-то делает с объектом запроса?

Во всяком случае, вот SSCCE во вкусе одиночной JSP:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Test</title>
    </head>
    <body>
        <p><a href="?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2">click here</a>
        <p>URL: ${param.url}
    </body>
</html>

Скопируйте и запустите его и нажмите на ссылку.Прямо здесь я вижу следующий результат:

нажмите здесь

URL: http://www.site.com? Param1 = 1¶m2 = 2

То же самое можно воспроизвести с помощью простого сервлета, подобного этому, который вызывается непосредственно из адресной строки браузера:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.getWriter().write(request.getParameter("url"));
}

Кстати, Tomcat настроен с URIEncoding="UTF-8" в соединителе HTTP, но даже с ISO-8859-1 (который используется по умолчанию), поведение - как и ожидается в данном конкретном случае - то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...