Как перенаправить пользователей с помощью HTTP-ответа - PullRequest
3 голосов
/ 10 декабря 2010

У меня есть сценарий, когда пользователь нажимает ссылку «ресторан» (для поиска ресторанов в определенном месте).Я должен проверить, установлено ли местоположение или нет.Если он не установлен, я хочу перенаправить его на страницу, на которой он может указать местоположение, а затем вернуться к результатам поиска, отфильтрованным по заданному местоположению.Я использую response.sendRedirect(url), чтобы перенаправить пользователя на страницу настроек.Но как я могу отправить обратный URL-адрес для перенаправления (т. Е. URL-адрес, на который я хочу отправить пользователя после установки местоположения)?

Я пробовал это:

response.sendRedirect("/location/set.html?action=asklocation&redirectUrl="+
            request.getRequestUri()+request.getQueryString());

, но этоне работает и отображается ошибка 404;Кроме того, URL, созданный в браузере, выглядит не очень хорошо.

Пожалуйста, если кто-нибудь может решить проблему ...

Ответы [ 2 ]

7 голосов
/ 10 декабря 2010

Похоже, вы пропустили хотя бы "?" от request.getRequestUri() до request.getQueryString(). Вы должны также url-кодировать параметр, который вы можете использовать для java.net.URLEncoder.

Кроме того, при выполнении перенаправлений необходимо предварительно указать путь к контексту: request.getContextPath().

Что-то вроде

String secondRedirectUrl = request.getRequestUri()+"?"+request.getQueryString(); 
String encodedSecondRedirectUrl = URLEncoder.encode(secondRedirectUrl, serverUrlEncodingPreferablyUTF8);
String firstRedirectUrl = request.getContextPath()+"/location/set.html?action=asklocation&redirectUrl="+encodedSecondRedirectUrl;
response.sendRedirect(firstRedirectUrl);

Лично я бы лучше решил проблему, сохранив RequestDispatcher в сеансе и перенаправив его после установки местоположения.

1 голос
/ 10 декабря 2010

Моим первым ответом будет удаление / на вашем URL, что-то такого (с вашим кодом):

response.sendRedirect("location/set.html?action=asklocation&redirectUrl="+
            request.getRequestUri()+request.getQueryString());

Если это не сработает, добавьте request.getContextPath() наначало вашей строки URL-адреса, например:

response.sendRedirect(request.getContextPath() + "/location/set.html?action=asklocation&redirectUrl="+request.getRequestUri()+request.getQueryString());

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

*1013* * *1013* *1013* *1013*интерпретирует его как относящийся к текущему URI запроса.Если расположение относительно начального '/', контейнер интерпретирует его как относительное к корню контейнера сервлета.

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