我有一个在本地(在 Tomcat 中)以及 Google App Engine 和 Heroku 上部署的简单应用程序。
该应用程序使用 JSTL 标记,并且它们在所有部署中都可以正常工作,除了 URL 标记 ( <c:url value="/someUrl"/>
),它仅在 Heroku 上附加了一个额外的正斜杠,这会搞砸一切。这就是我的意思:
<c:url value='/laundryLists/search.htm'/>
在我的本地 Tomcat 中,应用程序使用“testApp”上下文部署,上面的代码片段将在页面中生成以下字符串:
“/testApp/laundryLists/search.htm”
哪个是对的。
在我的 GAE 部署应用程序中,地址为 testApp.appspot.com,上面的代码片段生成:
“/laundryLists/search.htm”
这是正确的,因为这里的应用程序上下文是“/”(根)
在我的 Heroku 版本中,该版本部署在“testApp.herokuapp.com”
完全相同的代码生成:
“//laundryLists/search.htm”(注意开头有两个正斜杠)
这是错误的,因为如果放在链接中,例如
<a href="<c:url value='/laundryLists/search.htm'/>">whatever</a>
链接 URL 将是:
http://laundryLists/search.htm
这显然是错误的。
值得一提的是,其他 JSTL 标记(例如“forEach”)在 Heroku 中也可以正常工作。
所以我的问题是,为什么在 Heroku 上会发生这种情况,我该如何修复它(除了硬编码 URLS)?