2011-12-28 93 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