pageContext.request 类型

Type of pageContext.request

我发现 this 回答非常有用,但我不明白为什么它有效。
根据 API pageContext getRequest() 方法 returns ServletRequest 并且它不包含 getUserPrincipal() 方法。那么为什么要做这样的事情

<c:if test="${not empty pageContext.request.userPrincipal}">

    <c:if test="${pageContext.request.isUserInRole('ADMIN')}">

        User ${pageContext.request.userPrincipal.name} in ADMIN Group

    </c:if>

</c:if>

是隐式类型转换还是什么?

Servlet API 很久以前就被设计出来,以便在不同于 Web 的上下文中可用,HTTP 上下文(我认为支持 WAP 使用这个 API 是一个目标,当时)。

实际上,除了使用 servlet API 的传统 Java EE webapp 上下文之外,我不知道任何其他上下文。在这种情况下,所有请求都是 HttpServletRequest 的实例(它是 ServletRequest 的子接口)。还有 this method exists in HttpServletRequest.