java
  • url
  • heroku
  • jstl
  • 2012-12-09 36 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/*。戰爭

    這解決了我的問題。

    相關問題