В случае контроллера (сервлета), который заботится о модели, jsp:useBean
полезен только в том случае, если экземпляр по умолчанию (созданный с помощью конструктора no-arg) демонстрирует другое поведение / состояние, чем несуществующий экземпляр. Например. если вы хотели бы иметь имя пользователя по умолчанию «Неизвестный пользователь», вы должны сделать:
public User {
this.id = "Unknown User";
}
В противном случае конечный пользователь может столкнуться с надписью «Добро пожаловать» вместо «Добро пожаловать, неизвестный пользователь». В вашем конкретном случае вы можете безопасно удалить его. Это лишнее.
Однако я также видел аргумент, что это полезно для чистой документации. Вы можете объявить «бесполезные» экземпляры jsp:useBean
в верхней части страницы JSP, чтобы у вас был обзор, какие именно модели использовались на конкретной странице JSP. Хотя я нахожу это довольно умным, у меня никогда не было потребности в таком способе документирования модели в JSP. Согласно комментариям, еще один аргумент заключается в том, что таким образом IDE, такие как IDEA и Eclipse, могут автоматически заполнять свойства bean в EL.
Обновление : что касается определения местоположения, для этого он использует PageContext#findAttribute()
, а затем использует рефлексию / javabean-самоанализ для вызова методов-получателей. Э.Г.
${user.name}
примерно разрешается до
out.print(pageContext.findAttribute("user").getName())
Также см. Спецификацию JSP и спецификацию JSP EL .
Обновление 2 : <jsp:useBean>
, безусловно, не использует внутреннее имя или так в качестве префикса атрибута сеанса. Переберите все атрибуты сеанса самостоятельно, чтобы увидеть фактические ключи и значения:
<c:forEach items="${sessionScope}" var="entry">
${entry.key} = ${entry.value}<br>
</c:forEach>
или в сервлете
for (String name : Collections.list(session.getAttributeNames())) {
System.out.println(name + " = " + session.getAttribute(name));
}