Почему в JSP нужна страница pageContext?

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

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

Ответ 1

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


Обновление: иногда хотелось бы получить доступ к методам getter 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-адреса пользователя:

Your IP is: ${pageContext.request.remoteAddr}

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

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

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

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

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

Ответ 2

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