JSTL URL标记在Heroku上不起作用

我有一个简单的应用程序,我已在本地部署(在Tomcat中),以及在Google App Engine和Heroku上。

该应用程序使用JSTL标记,它们在所有部署中都可以正常工作,除了URL标记( ),只有在Heroku上,才会一个额外的正斜杠,这样可以解决所有问题。 这就是我的意思:

 https://stackoverflow.com/questions/13790720/jstl-url-tag-doesnt-work-on-heroku/ 

在我的本地Tomcat中,使用“testApp”上下文部署应用程序,上面的代码剪切将在页面中生成以下字符串:

“/testApp/laundryLists/search.htm”

哪个是对的。

在我的GAE部署的应用程序中,它位于地址testApp.appspot.com,上面的代码片段生成:

“/laundryLists/search.htm”

这是正确的,因为这里的应用程序上下文是“/”(根)

在我的Heroku版本中,它部署在“testApp.herokuapp.com”

完全相同的代码生成:

“//laundryLists/search.htm”(在开头注意两个正斜杠)

这是错误的,因为如果放在一个链接,如

 <a href="https://stackoverflow.com/questions/13790720/jstl-url-tag-doesnt-work-on-heroku/">whatever 

链接URL将是:

 http://laundryLists/search.htm 

这显然是错的。

值得一提的是,其他JSTL标签(例如“forEach”)在Heroku中运行良好。

所以我的问题是,为什么会在Heroku上发生这种情况,我该如何解决它(除了对URL进行硬编码)?

在将WAR文件部署到Heroku时 ,WAR文件是使用Webapp Runner启动的,它只是Tomcat的一个薄包装器,允许它从命令行轻松运行。 在当前部署的Webapp Runner版本中,默认上下文路径为/ ,这是额外斜杠的来源。 要将路径设置为其他内容(包括空字符串),可以使用--path参数。 要使用WAR部署为Heroku应用程序设置此项,您可以在WEBAPP_RUNNER_OPTS配置WEBAPP_RUNNER_OPTS中将其设置为thisr:

 heroku config:add WEBAPP_RUNNER_OPTS="--path ''" 

为了增加ryanbrainard所说的内容,如果有人遇到同样的麻烦我做了。 我发现在部署时尝试在命令行设置此标志没有任何效果,可能是因为我在执行git push时部署,而不是使用命令行部署war。

我不得不更新项目中的/ Procfile并在那里添加选项。 所以我的看起来像:web:java $ JAVA_OPTS -Dspring.profiles.active = prod -jar target / dependency / webapp-runner.jar –port $ PORT –path”target / * .war

这解决了我的问题。