2016-03-04 55 views
1

因此,在我之前我從未使用過JSTL。使用JSTL c:根據URL選擇條件

我想要做的是基本上說,如果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> 

很顯然,我只是不知道在「測試」字段中使用什麼功能。

回答

1

因此您希望從HTTP請求URL中提取信息。在EL中,HttpServletRequest實例可通過${pageContext.request}獲得。這個類又可以使用幾種方法,如getContextPath(),getRequestURI()甚至getRequestURL()

給定一個在http://www.website.com/urlone上打開的頁面,上下文路徑是否爲根目錄並不完全清楚。如果不是和Web應用程序部署到的/urlone上下文路徑,那麼你可以使用支票下面:

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

或者如果它是實際部署的根,和/urlone因此實際上代表的URI(符合servlet或JSP),那麼這樣做:

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

如果資源確實是一個servlet提供服務,那麼getServletPath()也是一個可能性,如果該URL可以有路徑參數,如/urlone/foo/bar您想忽略(即,當您將servlet映射到內部網址爲/urlone/*的URL模式時廣告/urlone)。

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

或者如果你喜歡檢查完整的URL,這是不是真的易於維護的方案,域和端口是Web應用程序的完全控制外,但很可惜:

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