在我的 tomcat 开发环境中无法使用相对链接

在我的 tomcat 开发环境中无法使用相对链接

我正在使用 tomcat 开发一个 Web 应用程序。在开发环境中,应用程序的根地址是localhost:8080/myapp/。在生产环境中,根地址是www.myapp.com/

当我在网站中使用相对链接时,例如/home,它在生产环境中运行良好,但我在开发环境中到达的地址是localhost:8080/home,这会剥离应用程序的根目录。显然,我不能只使用home,因为它第一次会起作用,但只会连接到地址字符串的末尾。我也不能使用 hosts 文件,我不知道如何创建别名或将流量从某个别名重定向到localhost:8080/myapp/

这似乎是一个非常常见的问题。提前致谢!

答案1

解决方案实际上在于您的网页代码中,而不是您可以进行的任何配置中。假设您使用 JSP 生成 HTML,则需要更改如下链接:

<a href="/home">a link to the root of my webapp</a>

看起来像这样:

<a href="<%= response.encodeURL(request.getContextPath() + "/home") %>">
  a link to the root of my webapp
</a>

request.getContextPath 才是真正的魔法:它始终返回属于您的 webapp 的前缀,无论它是什么。对于 ROOT webapp,它将返回“”(空字符串)。对于另一个 webapp,它可能会返回“/foo/bar”(如果您的 webapp 部署为 foo#bar.war)。

如果客户端未使用 cookie,则 response.encodeURL 会将会话标识符添加到您的 URL,以便在 cookie 不可用时会话能够正常工作。

如果您正在使用其他内容生成框架(Velocity、Freemarker 等),这些框架也提供了类似的方法来实现相同的功能。

相关内容