Предположим, у меня есть простой сервлет входа, который проверяет пройденный name
и создает объект User
и сохраняет его в сеансе.Java-сервлет и JSP-доступ к одному сеансовому компоненту
User user = new User();
user.setId(name);
request.getSession().setAttribute("user", user);
response.sendRedirect("index.jsp");
В index.jsp
странице я получить доступ к объекту пользователя через jsp:useBean
<jsp:useBean id="user" scope="session"
class="package.name.User"/>
<div class="panel">
Welcome ${user.id}
</div>
Он работает до сих пор.
Из документации JSP фасоли
Чтобы найти или создать экземпляр Bean, принимает следующие шагов, в следующем порядке:
- пытается найти Bean с размахом и именем, которое вы указывать.
- Определяет ссылочную переменную объекта с указанным вами именем.
- Если он находит Bean, сохраняет ссылку на него в переменной. Если вы указали тип, вы получите этот тип Bean .
- Если он не найден Bean, он запускает его из класса, который задает , сохраняя ссылку на него в новой переменной. Если имя класса представляет собой сериализованный шаблон, объект bean создается через java.beans.Beans.instantiate.
- Если был создан экземпляр (а не расположен) Bean, и если имеет теги или элементы тела (между и), выполняет теги тела.
вопросы:
Попытки найти Bean с размахом и задаваемое имя
Он не определяет процесс "локализовать". Означает ли это, что он проверит HttpServletRequest.getSession()
или просто проверьте, не создали ли другие страницы этот компонент или нет?
Если он не находит Bean, он запускает его из указанного вами класса, сохраняя в нем ссылку> в новой переменной.
Это фактически означает, что Jsp может связать вновь созданный компонент с использованием сессии jsp_internal_name_user. Нет слов о том, как Jsp хранит и находит бобы в сеансе.
Существует возможность доступа к объектам сеанса с использованием ${sessionScope.user}
, и это гарантирует, что «пользователь» из объекта сеанса Java будет получен. Тот же самый, который я вложил сам.
Java EE 5 Пример доступа к объектам сеанса доступа «Книжный магазин» с использованием подхода ${sessionScope.name}
.
Использование только ${user}
работ. И это меня беспокоит. Я хотел бы увидеть конкретное предложение в спецификации о процессе locate
и должен ли работать ${user}
, или это зависит от реализации ссылки JSP и/или JSTL.
Есть некоторые документы, которые в явном виде описать процесс переменных разрешающих на странице JSP? –
Intellij IDEA заполняет поля переменных только в случае явного объявления. –
1) Ты говоришь об ЭЛЕ? Проверьте спецификацию [JSP EL] (https://jsp.dev.java.net/spec/jsp-2_1-fr-spec-el.pdf). В двух словах, он 'PageContext # findAttribute()' определяет атрибуты в любой области. 2) Это действительно еще один аргумент, который я видел раньше. – BalusC