Доступ к переменным сеанса между двумя сервлетами - PullRequest
0 голосов
/ 16 января 2012

У меня есть два сервлета. В первом сервлете я извлекаю userId из базы данных и сохраняю его в этой переменной сеанса:

String uId = function.getLogin(username, password); //method getting the id

HttpSession session = request.getSession();
session.setAttribute("userId", uId); // here I'm setting the session variable with the id

Теперь во втором сервлете я хочу извлечь этот идентификатор пользователя из переменной сеанса, но создается исключение java.lang.NullPointerException.

HttpSession session = request.getSession(true);
String uId = session.getAttribute("userId").toString();
int userId = Integer.parseInt(uId); //this is the code that I'm using in the second servlet, and throwing the NullPointerException

Я что-то не так делаю, пожалуйста? Спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Вы должны проверить исключение, которое должно дать вам номер строки NPE. С точки зрения вашего кода:

HttpSession session = request.getSession(true);

Запрос может быть нулевым. Это очень маловероятно.

String uId = session.getAttribute("userId").toString();

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

Также может быть, что session.getAttribute("userId") возвращает ноль. Я бы сказал, что это наиболее вероятно. Может быть, это другой сеанс, где session.setAttribute("userId", uId); был вызван. Или, может быть, ваш первоначальный вызов function.getLogin(username, password); вернул ноль, поэтому вы установили null в сеансе?

// this is the code that [... is] throwing the NullPointerException
int userId = Integer.parseInt(uId); 

Вы не правы. Когда я читаю код Java 1.6, parseInt никогда не сгенерирует NPE. Вот первая строка в этом методе:

if (s == null) {
    throw new NumberFormatException("null");
}

Могу поспорить, что с вашей сессией что-то не так. Я бы предложил использовать отладчик, чтобы выяснить, что установлено неправильно. Printf-отладка также поможет.

0 голосов
/ 16 января 2012

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

...