Почему существует необходимость в pageContext в JSP? - PullRequest
25 голосов
/ 17 сентября 2010

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

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

Ответы [ 3 ]

32 голосов
/ 17 сентября 2010

Вам необходимо получить доступ к не -явным переменным.Имеет ли это теперь смысл?


Обновление : Иногда просто хотелось бы получить доступ к методам получения: 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, чтобы узнать обо всех этих методах получения.Некоторые из них могут быть полезны и в JSP / EL.

0 голосов
/ 04 мая 2018

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

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

0 голосов
/ 07 августа 2017

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

...