Прежде всего позвольте мне начать с объяснения перегруженными getSession()
методами. No-arg getSession()
всегда возвращает новый session
объект, который похож на getSession(true)
, но в случае getSession(false)
он проверяет существующий сеанс, если присутствует возвращает его или возвращает ноль.
После того, как вы установили атрибут для сеанса, он будет доступен пользователю до тех пор, пока его сеанс не станет доступным (не нулевым) или не будет invalidated
, поэтому ваши данные user
будут также доступны в вашем JSP и servlet2. Но метод, который вы используете для установки атрибута для сеанса, уязвим, поскольку getSession()
также может возвращать новый сеанс, в котором ваш атрибут не будет присутствовать.
Таким образом, безопасный способ - извлечь объект сеанса по ссылке, проверить, является ли он пустым, или получить или установить атрибут.
HttpSession session = request.getSession(false);
if(session != null) {
// set/get data whatever you need. Avoids NullPointerException
}
Второй способ - использовать скрытый атрибут в JSP
, например,
<input type="hidden" name="user" value="<%=request.getAttribute("user") %>"/>
Так что вам просто нужно установить атрибут для запроса и получить его значение в jsp
и установить значение для скрытого поля. Теперь во втором сервлете используйте метод getParameter
(возвращает String), чтобы получить значение.
String user = request.getParameter("user");