request.getScheme()方法的JSTL语法?

时间:2016-01-17 06:08:49

标签: jsp jstl el

我想在JSTL中转换一些代码。具体来说我实施了

<c:if test='${request.scheme == "http"}'>
</c:if>

取代

if ("http").equals(request.getScheme()) {
    //do something
}

但看起来JSTL语法不正确且条件永远不匹配。我没有收到任何错误。

我的语法不正确吗?

请指导。

1 个答案:

答案 0 :(得分:2)

普通JSP中不存在${request}隐式EL对象。它只存在于几个也使用EL的MVC框架中,例如JSF。您可以通过直接打印${request}并注意到它实际上没有打印任何内容来轻松地弄清楚它。

The request implicit EL object is: ${request}

在普通JSP中,ServletRequest仅由PageContext#getRequest()提供,而PageContext则可用作隐式EL对象${pageContext}

<c:if test="${pageContext.request.scheme eq 'http'}">
    ...
</c:if>

请注意,单引号可用于表示EL中的String

另见

对于具体问题

无关,如果您确实要将安全(SSL)请求与不安全的请求区分开来,最好再检查ServletRequest#isSecure()

<c:if test="${not pageContext.request.secure}">
    ...
</c:if>