Я пытаюсь завершить процесс регистрации для моего веб-приложения, но меня смущают переадресация / перенаправление сервлетов (снова).Поток выглядит так:
// /signup/index.jsp
<form action='/user/signup'>
</form>
<%
if (request.getAttribute("msg") != null) {
%><div><%= request.getAttribute("msg") %><%
}
%>
// Servlet which maps to '/user/signup':
public void doPost(..) {
// process signup params..
// I want to show the user /signup/index.jsp again after completion:
req.setAttribute("msg", "signup worked!");
req.getRequestDispatcher("/signup/index.jsp").forward(req, resp);
}
когда я использую метод forward (), браузер по-прежнему отображает URL-адрес действия публикации:
/user/signup
, но содержимое имеет:
/signup/index.jsp
это то, что должен делать forward ().Хотя я не уверен, что это вводит пользователя в заблуждение - URL отличается от страницы, которая на самом деле сгенерировала контент.
Я прошел через то, что делает твиттер, похоже, что он обманывает пользователя:
// twitter.com/signup
if (ok) {
forward("/find_sources/suggestions");
if (ok) {
forward("/find_sources/contacts");
if (ok) {
forward("/find_sources/anyone");
if (ok) {
forward("/");
}
}
}
else {
forward("/signup"); // error msg displayed here etc
}
В приведенном выше примере, если вы запутались на начальной странице регистрации, ваш браузер отображает URL-адрес / account / create, но содержимое страницы выглядит как / signup - так что я думаю, что они 'я делаю то же самое (я просто предполагаю, что лежащие в основе опции forward () / redirect () одинаковы для всех http-серверов, а не только для jsp).
Тогда мой поток нормален?Должен ли я сделать это как-то по-другому?Я предполагаю, что варианты:
- Используйте forward () и принимайте, что URL будет иметь URL действия.
- Используйте redirect () и сохраняйте любые сообщения, которые я хочу показатьпользователь в сеансе.
Спасибо