Почему существует необходимость в pageContext в JSP?

Когда мы можем получить доступ ко всем неявным переменным в JSP, почему у нас есть pageContext?

Мое предположение следующее: если мы используем выражения EL или JSTL, для доступа или установки атрибутов нам нужен pageContext. Дайте мне знать, прав ли я.

3 ответа

Решение

Вам это нужно для доступа к неявным переменным. Теперь это имеет смысл?


Обновление: иногда просто хотел бы получить доступ к методам получения HttpServletRequest а также HttpSession непосредственно. В стандартном JSP оба доступны только ${pageContext}, Вот некоторые примеры использования в реальном мире:


Обновление страницы по истечении времени сеанса:

<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval}">

Передача идентификатора сеанса в апплет (чтобы он мог взаимодействовать с сервлетом в одном сеансе):

<param name="jsessionid" value="${pageContext.session.id}">

Отображение некоторого сообщения только по первому запросу сеанса:

<c:if test="${pageContext.session['new']}">Welcome!</c:if>

Обратите внимание, что new имеет специальную обработку, потому что это зарезервированное ключевое слово в EL, по крайней мере, начиная с EL 2.2


Отображение IP-адреса пользователя:

 Ваш IP-адрес: ${pageContext.request.remoteAddr} 

Делаем ссылки доменными относительно без жесткого кодирования текущего пути к контексту:

<a href="${pageContext.request.contextPath}/login">login</a>

Динамически определяя <base> tag (с помощью JSTL-функций taglib):

<base href="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, pageContext.request.contextPath)}/">

Etcetera. Заглянуть в вышеупомянутое HttpServletRequest а также HttpSession Javadoc, чтобы узнать обо всех этих методах получения. Некоторые из них могут быть полезны и в JSP/EL.

Чтобы добавить к отличному ответу @BalusC, полученный вами PageContext может не ограничиваться тем, что вы видите в спецификации.

Например, Lucee - это сервлет JSP, который добавляет множество функций в интерфейс и абстрактные классы. Получив ссылку на PageContext, вы можете получить доступ к большому количеству информации, которая в противном случае недоступна.

Все 11 неявных переменных EL определены как Map, кроме переменной pageContext. Переменная pageContext предоставляет удобные методы для доступа к атрибутам запроса / ответа / сеанса или пересылки запроса. Конечно, вы можете сделать гораздо больше, чем это

Другие вопросы по тегам