Веб-разработка Java: передача управления от одного сервлета к другому при передаче объекта запроса (Версия 2)

EDIT: изменено имя файла на ‘ follow-up.jsp ‘ для ясности.

Это более короткая и, надеюсь, лучшая версия более длинного вопроса, который я опубликовал ранее сегодня (ссылка: Веб-разработка Java: передача управления от одного сервлета к другому при передаче объекта запроса ).

У меня есть форма, которая после отправки. В соответствующем сервлете, к которому выполняется действие POST, Я хочу снова показать страницу формы или страницу последующих действий, в зависимости от того, будет ли проверка успешна. Как страница формы, так и последующая страница нуждаются в данных формы, представленных пользователем; страница формы нуждается в нем, чтобы повторно заполнить поля формы, и последующая страница нуждается в нем, чтобы показать некоторые из этих данных (например, чтобы пользователь дважды проверить, что это правильно). Поэтому я хочу, чтобы объект запроса, содержащий отправленные данные, был доступен для обеих страниц.

Переадресация обратно в форму не является проблемой:

RequestDispatcher rd =
getServletContext ().getRequestDispatcher («/form.JSP-страница»);
Резерфорд.вперед (запрос, ответ);

Но как мне добраться до следующей страницы (скажем, follow-up.jsp) таким образом, что объект запроса, содержащий данные отправленной формы, по-прежнему доступен на этой странице последующих действий?

Кажется, что следующее не работает:

response.sendRedirect("/MyProject/follow-up.jsp");

Это связано с тем, что если” name «является параметром формы, который был назначен атрибуту объекта запроса в сервлете обработки форм, с этим атрибутом удобно также называться» name», то следующая строка в последующем.JSP-страница:

Ваше имя: ${name}.

не печатает имя отправленного пользователем (вместо этого ничего не печатает, т. е. только “ваше имя:”). Другими словами, атрибуты исходного объекта запроса больше не доступны в последующих действиях.JSP-страница. Это имеет смысл в этом ответе.sendRedirect запускает новый HTTP-запрос (с собственными объектами запроса и ответа). Но это не то, чего я хочу.

Другая (вторичная) проблема заключается в том, что sendRedirect не может выполнять POST-запросы (он использует только GET; см. [link] response.sendRedirect () из сервлета в JSP не работает).

EDIT: кроме того, я понимаю, что я мог бы на самом деле использовать:

Резерфорд.вперед (запрос, ответ);

для обоих запросов. Однако это приведет к тому, что обе страницы будут иметь один и тот же URL, отображаемый в адресной строке (т. е. имя сервлета маршрутизации, например «…../Реестр.)» И это, безусловно, плохо, потому что страница формы и последующие страницы являются совершенно разными страницами; последующая страница имеет мало общего с формой (за исключением отображения некоторых из представленных данных формы).

Спасибо.

1 ответ

  1. В этом случае я считаю, что вам нужно хранить данные не в запросе, а в области разговора….или в области сеанса…о перенаправлении не поддерживает сообщение…тогда в идеале все переадресации по определению должны быть только GET requests…..если вы хотите перенаправить с помощью запроса A POST, пожалуйста, оцените свой подход…