2011-12-28 92 views
1

我想在我的webproject內建立一個鏈接,顯示鏈接文本中鏈接的URL。如何動態獲取當前基URL?

例如,如果我的工作在我的本地的示例項目,我想將example.jsp頁面的鏈接,看起來像http://localhost:8081/Example/example.jsp

如果將鏈接到/example.jsp頁面。

我需要能夠動態地做到這一點。

+0

然後,只需做到這一點?你的問題到底是什麼?如何動態獲取主機名,端口和/或上下文名稱或其他? – BalusC 2011-12-28 16:25:14

+0

是的,我需要能夠動態地做到這一點。我編輯了我的問題 – user906153 2011-12-28 16:25:52

+0

當項目加載到服務器時,它將能夠獲取正確的完整URL /example.jsp。 – user906153 2011-12-28 16:30:11

回答

6

你可以使用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> 
+0

有沒有辦法做到這一點,而不安裝JSTL? – user906153 2011-12-28 16:53:39

+0

是的,只需在預處理控制器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

+0

感謝BalusC,我有一段時間沒有見過那種罕見的代碼。您的基本網址確實很有用。再次感謝! – 2012-10-26 07:11:02