我想獲取通常在本地主機上的http://localhost:9000/
和在服務器上的http://mydomain.com
的應用程序的當前基本URL。如果將來我可能會開始使用https。獲取Play應用程序的基礎URL
我該怎麼做?
我想獲取通常在本地主機上的http://localhost:9000/
和在服務器上的http://mydomain.com
的應用程序的當前基本URL。如果將來我可能會開始使用https。獲取Play應用程序的基礎URL
我該怎麼做?
您使用的是什麼版本的Play Framework?
如果您使用的是Play 1.x,則應該使用application.conf變量手動指定應用程序的基本url。這是我爲了檢索我的應用程序的基礎URL所做的工作。例如:
application.baseUrl=http://localhost:9000
%devcloud.application.baseUrl=http://dev-url.com
%prod.application.baseUrl=http://prod-url.com
透過Play框架2.x中,你可以使用額外的配置文件(因此變量的值取決於環境 - PROD,開發,測試......),如下解釋:http://www.playframework.com/documentation/2.2.x/ProductionConfiguration
這些解決方案特別適用於不想依靠動作或控制器的情況。否則,您可以使用操作中的請求檢索絕對URL。
但我不想依賴它正常工作的端口。 –
然後,您還必須爲端口添加配置變量。更改應用程序的運行端口(即使在開發模式下它並不重要)或協議(http或https)不是一個小決定,因此處理一個或兩個變量並不壞。 ) – Zarkus13
然後,當應用程序在不同於9000的端口上運行時,我必須始終更改它。 –
,然後嘗試獲得的baseUrl: play.Play.application().configuration().getString("application.baseUrl")
我不想依賴它運行的端口。我希望它是自動的。 –
目前play.Play.application().configuration().getString("application.baseUrl");
在玩最新版本depricated。所以這裏是解決這一問題的最新解決方案:
首先注入配置到類:
@Inject
Configuration configuration;
然後使用它像:
String baseUrl = configuration.getString("application.baseUrl");
你讀過[是](HTTP:/ /stackoverflow.com/questions/11158750/how-to-reverse-generate-an-absolute-url-from-a-route-on-play-2-java) 答案? –
@Artsiom,正如所料,'Router.getFullUrl(「Controller.action」)' - 沒有這樣的方法,'routes.MyController.myMethod()。absoluteURL(request());' - 相同。 –
@Artsiom,但我不想引用控制器和操作來獲取基本URL,因爲它們可能會發生變化。 –