Использование символа хеша в прямом URL с RequestDispatcher - PullRequest
2 голосов
/ 19 июля 2010

Я пытаюсь переслать запрос на другой URL, который содержит символ хеша ('#'):

request.getRequestDispatcher("/some/path.jsp#somehash").forward(request, response);

Однако Tomcat сообщает мне, что "запрошенный ресурс недоступен".Если я удаляю хеш из URL, все работает нормально.Хэши не разрешены или я неправильно к ним отношусь?

Ответы [ 2 ]

7 голосов
/ 19 июля 2010

Символ # - это браузер, а не сервер.Когда вы набираете URL с # в браузере, браузер не отправляет эту часть на сервер.Он отправляет URL-адрес без него, затем переходит на именованный якорь, когда возвращает страницу.

Когда вы просите контейнер получить этот URL-адрес для вас, он не обрабатывает # иначелюбой другой URL - для него нет особого значения, поэтому он ищет JSP-страницу с именем /some/path.jsp#somehash, которая, конечно, не существует.

Вам нужно будет сохранить этот переход к якорулогика на клиенте как-то.Возможно, вы могли бы поместить некоторый javascript на получившуюся страницу, чтобы прокрутить до этого пункта в документе.

4 голосов
/ 19 июля 2010

Фрагменты URL-адреса сугубо клиентские. RequestDispatcher#forward() полностью на стороне сервера. Указанный в forward URL не будет отправлен на клиентскую сторону. Однако вы можете перенаправить на указанный URL, используя HttpServletResponse#sendRedirect(). Затем фрагмент URL будет отправлен на клиентскую сторону и также будет отображен в адресной строке браузера. Перенаправление запроса, однако, имеет тот недостаток, что текущий запрос будет обработан и будет создан новый. Если это не по карману, то вам действительно придется искать решение в углу JavaScript.

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