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
这解决了我的问题。