2015-01-20 3 views
0

У меня проблема с перенаправлением в jsp, страница остается и не вызывает никаких ошибок.Невозможно перенаправить, когда скрипт включен RequestDispatcher

Я могу сделать перенаправление, когда я направляю написать сценарий в моем login.jsp как

<% 
String redirectURL = "/client/index.jsp"; 
response.sendRedirect(redirectURL); 
%> 
<t:login title="Client Login"> 
.......... 
</t:login> 

Но я не могу сделать переадресацию когда я разбить файл на три и включите его. ниже - моя реализация.

login.jsp

<%@include file="/include/checkhandler.jsp"%> 

checkhandler.jsp - это скрипт, который будет проверять файл в папку обработчика и включить его, когда он существует.

...... 
request.getRequestDispatcher(handler).include(request, response); 
...... 

login_handler.jsp это файл диспетчеру будет включать в себя

String redirectURL = "/client/index.jsp"; 
response.sendRedirect(redirectURL); 
out.println("hello world"); 

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

+0

Является ли перенаправление условным? Отправьте еще немного своего кода. –

+0

Да, у меня есть отладка и убедитесь, что код выполняется, login_handler.jsp могут печатать, проблема заключается в том, что страница не перенаправляется после запуска через sendRedirect –

+0

. Фактически я имел в виду, если есть какие-либо блоки if-else в ваши JSP и любые условия, когда перенаправление не произойдет. Имеет ли login_handler.jsp только эти две строки? –

ответ

1

Вместо этого вы должны использовать RequestDispatcher#forward(). Меняйте checkhandler.jsp в

request.getRequestDispatcher(handler).forward(request, response); 

стороне сервера включают запрещено изменять код состояния ответа, который является тем, что происходит, когда вы используете sendRedirect(). Любая такая попытка просто игнорируется контейнером.

Из RequestDispatcher#include() документы:

Объект ServletResponse имеет свои пути элементы и параметры остаются неизменными от вызывающего абонента. Входящий сервлет не может изменить код состояния отклика или установить заголовки; любая попытка произвести изменение - игнорируется.

Это ограничение по дизайну. Спецификация рассматривает веб-компонент включается как гостя т.е. он не может направить поток и любые такие попытки были бы справедливо игнорировали вместо того, чтобы бросать исключение, чтобы возможно позволить включать любого сервлета, который вы можете иметь.

Только хостинг веб-компонент (тот, который делает включение) будет полностью контролировать поток, а также то, какие заголовки ответов отправляются клиенту.

+0

checkhandler является частью login.jsp, я не могу использовать forward for this –

+1

Это ограничение по дизайну. Пожалуйста, обратитесь к документам. Я добавил ссылку на мой ответ. –

0

Вы это в коде

out.println("hello world"); 
String redirectURL = "/client/index.jsp"; 
response.sendRedirect(redirectURL); 

, который не будет работать, потому что вы не может перенаправить после записи в поток ответа. Переадресация отправляется в заголовке ответа. Тело ответа не должно содержать html.

+0

print, чтобы позволить op понять выполнение, пропустив эту часть, я исправил свой вопрос, спасибо –

+0

Я думаю, что вы используете объект «response» в некотором роде (где-то в ваших 3 jsps). Это то, что мешает вашей перенаправлению. Остается выяснить, кто и как. – ramp

 Смежные вопросы

  • Нет связанных вопросов^_^