我正在使用 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 等),这些框架也提供了类似的方法来实现相同的功能。