【问题标题】:How to obtain the current base URL dynamically? [duplicate]如何动态获取当前的base URL? [复制]
【发布时间】:2011-12-28 16:22:42
【问题描述】:

我正在尝试在我的网络项目中创建一个链接,以在链接文本中显示链接的 url。

例如,如果我正在处理本地主机的示例项目,我希望 example.jsp 页面的链接看起来像 http://localhost:8081/Example/example.jsp

链接到/example.jsp 页面的位置。

我需要能够动态地做到这一点。

【问题讨论】:

  • 那么就这样做?你的问题到底是什么?如何动态获取主机名、端口和/或上下文名称之类的?
  • 是的,我需要能够动态地执行此操作。我已经编辑了我的问题
  • 当项目加载到服务器时,它将能够获得/example.jsp的正确完整URL。

标签: jsp


【解决方案1】:

您可以使用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 的当前实例的简写,&lt;c:set var="url"&gt; 行基本上将HttpServletRequest#getRequestURL() 返回的StringBuffer 转换为String,这样可以在字符串函数中使用)

然后你可以如下创建链接:

<a href="${base}example.jsp">${base}example.jsp</a>

或者,当使用 HTML &lt;base&gt; 标签使文档中的所有相对链接都相对于它时:

<head>
    <base href="${base}" />
</head>
<body>
    <a href="example.jsp">${base}example.jsp</a>
</body>

【讨论】:

  • 有没有办法在不安装 JSTL 的情况下做到这一点?
  • 是的,只需在预处理控制器 servlet 中准备信息(如果你有任何一个......我的印象是你没有任何一个,因为你没有使用 JSTL) ,或者使用 scriptlets 代替(嵌入在 JSP 中的原始 Java 代码)。然而,十多年来,强烈反对Scriptlet。另见stackoverflow.com/questions/3177733/…
  • 感谢 BalusC,我已经有一段时间没有看到这种罕见的代码了。您的基本 URL 确实有效。再次感谢!
猜你喜欢
  • 2014-04-26
  • 2015-10-25
  • 2012-06-05
  • 1970-01-01
  • 2015-08-26
  • 2016-09-03
  • 1970-01-01
  • 2021-08-02
  • 2018-10-17
相关资源
最近更新 更多