2014-01-24 63 views
4

我想獲取通常在本地主機上的http://localhost:9000/和在服務器上的http://mydomain.com的應用程序的當前基本URL。如果將來我可能會開始使用https。獲取Play應用程序的基礎URL

我該怎麼做?

+0

你讀過[是](HTTP:/ /stackoverflow.com/questions/11158750/how-to-reverse-generate-an-absolute-url-from-a-route-on-play-2-java) 答案? –

+0

@Artsiom,正如所料,'Router.getFullUrl(「Controller.action」)' - 沒有這樣的方法,'routes.MyController.myMethod()。absoluteURL(request());' - 相同。 –

+0

@Artsiom,但我不想引用控制器和操作來獲取基本URL,因爲它們可能會發生變化。 –

回答

4

您使用的是什麼版本的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。

+0

但我不想依賴它正常工作的端口。 –

+0

然後,您還必須爲端口添加配置變量。更改應用程序的運行端口(即使在開發模式下它並不重要)或協議(http或https)不是一個小決定,因此處理一個或兩個變量並不壞。 ) – Zarkus13

+0

然後,當應用程序在不同於9000的端口上運行時,我必須始終更改它。 –

2

,然後嘗試獲得的baseUrl: play.Play.application().configuration().getString("application.baseUrl")

+0

我不想依賴它運行的端口。我希望它是自動的。 –

0

目前play.Play.application().configuration().getString("application.baseUrl");在玩最新版本depricated。所以這裏是解決這一問題的最新解決方案:

首先注入配置到類:

@Inject 
    Configuration configuration; 

然後使用它像:

String baseUrl = configuration.getString("application.baseUrl");