У меня есть этот сервлет, в котором я получу имя и пароль объекта request
, чтобы позже проверить, существует ли он в базе данных, и проверить его полное имя. Но как только объект типа создан UsuarioDTO
, я не знаю, как сохранить его в сеансе, чтобы показать свойство nombreCompleto
в различных JSP :
@WebServlet("/One")
public class One extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
/* Se crea el usuario */
UsuarioDTO usuario = new UsuarioDTO();
usuario.setIdUsuario(1);
usuario.setNombre("jperez");
usuario.setNombreCompleto("Juan Pérez López");
//Aquí necesito meter el usuario a la sesión antes de que se
//vaya a la página principal
response.sendRedirect(request.getContextPath() + "/principal.jsp");
}
}
Это ДТО :
public class UsuarioDTO {
private long idUsuario;
private String nombre;
private String nombreCompleto;
public long getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(long idUsuario) {
this.idUsuario = idUsuario;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNombreCompleto() {
return nombreCompleto;
}
public void setNombreCompleto(String nombreCompleto) {
this.nombreCompleto = nombreCompleto;
}
}
➊ Сначала вы извлекаете объект
HttpSession
:В интерфейсе
HttpSession
Арун Гупта 1 говорит:➋ Затем назначьте вашему объекту имя в качестве атрибута в сеансе. То есть, например:
В вашем коде:
➌ И в вашем JSP (
principal.jsp
) вы можете использовать язык выражений (EL) для отображения данных. Это, например:✱ Приложение
Поскольку вы используете метод
response.sendRedirect
, браузер должен сделать еще один запрос к серверу, чтобы отобразить соответствующий JSP (URL в браузере меняется), поэтому вам нужно иметь объект в сеансе, т.е. в объектеsession
.Однако, если бы вы использовали метод
request.getRequestDispatcher
, вам нужно было бы иметь объект только в текущем запросе, то есть в объектеrequest
. И браузеру не нужно будет делать еще один запрос (в этом случае URL-адрес браузера остается прежним).Оценки
Переменная сеанса должна быть создана следующим образом:
Вы можете установить нужные атрибуты и получить их, используя атрибут get:
В вашем JSP это будет выглядеть так:
Для получения дополнительной справки вы можете использовать следующий учебник:
сервлет-сеанс
Вы должны создать объект сеанса типа внутри вашего класса Java:
Затем вы должны добавить атрибут, который хотите сохранить, присвоив ему идентификатор и значение, в вашем случае:
Таким образом, вы уже сохранили значение в сеансе.
Чтобы получить сохраненное значение, вы должны использовать метод Get, например:
Таким образом, теперь вы можете передавать или извлекать его непосредственно из JSP.
Ваше здоровье
Я должен препятствовать ответам, основанным на скриптлетах (
<% %>
и<%= %>
), которые считаются устаревшими. Если вы работаете над проектом со скриптлетами, оставьте его так, но новые проекты должны использовать язык выражений (EL) или, по крайней мере, JSTL.Чтобы поместить объект в
session
, я согласен с другими вопросами, хотя я рекомендую ставить весь DTO.Чтобы использовать bean-компонент через EL, просто выполните
в ЖСП. Это будет искать bean-компонент
usuario
в различных областях (страница, запрос, сеанс и приложение), и когда он найдет его, он вызовет методgetNombreCompleto()
.Его также можно использовать внутри тегов JSTL:
Если ваша платформа еще не поддерживает EL, вы можете использовать теги JSP
useBean
иgetAttribute
Кстати, если данные бина связаны с запросом, а не с сессией, наиболее нормальным будет сохранить бин как атрибут
request
(request.setAttribute()
) и выполнить переадресацию вместо перенаправления 1 ; Это означает, что данные не передаются другим одновременным запросам. В этом случае JSP не изменяется.1 Redirect указывает клиенту (браузеру), что он должен быть перенаправлен на новую страницу, создавая новый запрос. Форвард продолжает обрабатывать тот же запрос по переданному ему URL-адресу, браузер ничего не делает.