使用JSTL c:根据URL选择条件

时间:2016-03-04 14:50:07

标签: jstl parameter-passing el

所以,忍受我今天之前从未使用过JSTL。

我要做的是基本上说如果URL =“www.website.com/urlone”,则显示特定的HTML代码块。否则,显示常规代码。

我是在正确的轨道上吗?

<c:choose>
<c:when test="${param.enter=='1'}">
    DISPLAY ALTERNATE LOGO
</c:when>    
<c:otherwise>
    DISPLAY MAIN LOGO
</c:otherwise>

显然,我只是不确定在'test'字段中使用什么函数。

1 个答案:

答案 0 :(得分:1)

因此,您希望从HTTP请求URL中提取信息。在EL中,HttpServletRequest实例可由${pageContext.request}获得。这个类反过来有几种可能有用的方法,例如getContextPath()getRequestURI()甚至getRequestURL()

鉴于在http://www.website.com/urlone上打开的页面,如果上下文路径是root,则不清楚。如果不是,并且将webapp部署到/urlone的上下文路径,那么您可以使用以下检查:

<c:when test="${pageContext.request.contextPath eq '/urlone'}">
    DISPLAY ALTERNATE LOGO
</c:when>    

或者如果它实际部署到root,并且/urlone因此实际上代表了URI(匹配您的servlet或JSP),那么这样做:

<c:when test="${pageContext.request.requestURI eq '/urlone'}">
    DISPLAY ALTERNATE LOGO
</c:when>    

如果资源确实由servlet提供,那么如果URL可以包含您想要忽略的/urlone/foo/bar等路径参数,那么getServletPath()也是可能的(即您将servlet映射到/urlone/*而不是/urlone)的URL模式。

<c:when test="${pageContext.request.servletPath eq '/urlone'}">
    DISPLAY ALTERNATE LOGO
</c:when>    

或者,如果你更喜欢检查整个网址,这对于方案来说并不是真正的维护,网域和端口完全不受webapp的控制,但是唉:

<c:when test="${pageContext.request.requestURL eq 'http://www.website.com/urlone'}">
    DISPLAY ALTERNATE LOGO
</c:when>