我想在我的webproject內建立一個鏈接,顯示鏈接文本中鏈接的URL。如何動態獲取當前基URL?
例如,如果我的工作在我的本地的示例項目,我想將example.jsp頁面的鏈接,看起來像http://localhost:8081/Example/example.jsp
如果將鏈接到/example.jsp
頁面。
我需要能夠動態地做到這一點。
我想在我的webproject內建立一個鏈接,顯示鏈接文本中鏈接的URL。如何動態獲取當前基URL?
例如,如果我的工作在我的本地的示例項目,我想將example.jsp頁面的鏈接,看起來像http://localhost:8081/Example/example.jsp
如果將鏈接到/example.jsp
頁面。
我需要能夠動態地做到這一點。
你可以使用JSTL如下獲得該網站的基本URL:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="url">${req.requestURL}</c:set>
<c:set var="base" value="${fn:substring(url, 0, fn:length(url) - fn:length(req.requestURI))}${req.contextPath}/" />
...
(該req
是上面的例子只是一個速記的HttpServletRequest
目前的情況下,<c:set var="url">
線基本轉換StringBuffer
返回HttpServletRequest#getRequestURL()
至String
,以便它可以用於字符串功能)
然後你可以創建鏈接如下:
<a href="${base}example.jsp">${base}example.jsp</a>
或者,也許,使用HTML標籤<base>
這使得相對於它在文檔中的所有相關鏈接時:
<head>
<base href="${base}" />
</head>
<body>
<a href="example.jsp">${base}example.jsp</a>
</body>
有沒有辦法做到這一點,而不安裝JSTL? – user906153 2011-12-28 16:53:39
是的,只需在預處理控制器servlet中準備好信息(如果您有任何一個...我的印象是您沒有任何人給出您未使用JSTL的事實),或者使用* scriptlets * (嵌入在JSP中的原始Java代碼)。 * Scriptlets *十多年來一直受到強烈的阻止。另見http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files。 – BalusC 2011-12-28 16:55:15
感謝BalusC,我有一段時間沒有見過那種罕見的代碼。您的基本網址確實很有用。再次感謝! – 2012-10-26 07:11:02
然後,只需做到這一點?你的問題到底是什麼?如何動態獲取主機名,端口和/或上下文名稱或其他? – BalusC 2011-12-28 16:25:14
是的,我需要能夠動態地做到這一點。我編輯了我的問題 – user906153 2011-12-28 16:25:52
當項目加載到服務器時,它將能夠獲取正確的完整URL /example.jsp。 – user906153 2011-12-28 16:30:11