Передача атрибута при перенаправлении из фильтра в JSP: сессия против запроса - PullRequest
2 голосов
/ 01 марта 2012

Внутри фильтра я пытаюсь отправить просроченные сессии обратно на страницу входа с сообщением, что пользователь должен войти в систему. Я предпочитаю прикреплять сообщение к объекту запроса, а не к объекту сеанса, чтобы мне не пришлось беспокоиться об удалении сообщения позже.

Когда я использую внутри фильтра:

catch (NullPointerException exc)

{

    String message = "You must log in to access this site.";
    url += "/login.jsp";
    request.setAttribute("message", message);
    httpResponse.sendRedirect(url); 
}

На странице входа НЕ отображается сообщение (сообщение пустое). Тем не менее, когда я использую:

session.setAttribute("message", message);

Сообщение красиво отображается на странице входа.

В сервлетах у меня нет проблем с подключением и отображением сообщений с использованием объекта запроса. Я заметил эту сложность только с фильтрами.

Почему это происходит и можно ли это предотвратить? Если я должен использовать сеанс при перенаправлении из фильтра, каков наилучший способ удалить сообщение на стороне JSP?

1 Ответ

2 голосов
/ 01 марта 2012

Вместо этого используйте RequestDispatcher .

Я всегда рекомендую всем, кто спрашивает RequestDispatcher и SendRedirect, обратиться к этой статье на На стороне сервера .

См. Также ServletRequest # getRequestDispatcher (java.lang.String)

так что вы делаете

 request.getRequestDispatcher("/login.jsp").forward(request, httpResponse);
...