Использование forward () / redirect () для процесса регистрации? - PullRequest
0 голосов
/ 11 июля 2010

Я пытаюсь завершить процесс регистрации для моего веб-приложения, но меня смущают переадресация / перенаправление сервлетов (снова).Поток выглядит так:

// /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).

Тогда мой поток нормален?Должен ли я сделать это как-то по-другому?Я предполагаю, что варианты:

  1. Используйте forward () и принимайте, что URL будет иметь URL действия.
  2. Используйте redirect () и сохраняйте любые сообщения, которые я хочу показатьпользователь в сеансе.

Спасибо

1 Ответ

1 голос
/ 11 июля 2010

Если вы хотите сделать то, что делает твиттер - сделайте всю проверку в строке - то есть отобразите ошибки проверки с помощью AJAX. Тогда пользователи будут нажимать «зарегистрироваться», только если они все правильно завершили, и тот факт, что переадресация используется, не будет большой проблемой.

Однако, в общем случае, попробуйте найти какую-то инфраструктуру разговора (например, весенний веб-поток ) или что-то похожее на @ViewScope JSF - то есть что-то между запросом и сессией, чтобы приспособить этот вариант использования.

Другой вариант - использовать перенаправление и очистить содержимое только что установленного сеанса.

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