java
  • url
  • heroku
  • jstl
  • 2012-12-09 34 views 2 likes 
    2

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

    该应用程序使用JSTL标签,并且除了URL标签(<c:url value="/someUrl"/>)之外,它们在所有部署中都可以正常工作,只有在Heroku上,该标签预先添加了一个额外的正斜杠,从而将所有内容都拧紧。这就是我的意思是:

    <c:url value='/laundryLists/search.htm'/> 
    

    在我本地的Tomcat,在应用程序部署有“testApp”的背景下剪断将genreate在页面下面的字符串上面的代码:

    “/ 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上发生这种情况,我该如何解决它(除了硬编码的URL)?

    回答

    2

    deploying WAR files to Heroku时,WAR文件与Webapp Runner一起启动,它仅仅是Tomcat的一个简单包装,允许它从命令行轻松运行。在当前部署的Webapp Runner版本中,默认的上下文路径是/,这是额外的斜杠来自的地方。要设置其他路径(包括空字符串),可以使用--path参数。要设置此使用WAR部署Heroku的应用程序,你可以在WEBAPP_RUNNER_OPTS配置VAR像thisr设置:

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

    要添加到什么什么ryanbrainard说和的情况下,任何人都有和我一样的麻烦。我发现试图在命令行设置这个标志在我部署时没有任何影响,这可能是因为我在执行git push时部署而不使用命令行部署战争。

    我不得不在我的项目中更新/ Procfile并在其中添加选项。所以我的样子如下: web:java $ JAVA_OPTS -Dspring.profiles.active = prod -jar target/dependency/webapp-runner.jar --port $ PORT --path''target/*。战争

    这解决了我的问题。

    相关问题