我想在我的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