2009-06-18 10 views
9

コードから現在実行中のAppengine JavaアプリケーションのサーバーURLを取得しようとしています。つまり、私のローカルのdevマシン上でアプリが実行されている場合、私は何とか "http://localhost:8080"を返すようにしたいのですが、それがprodで実行されていれば "http://myappid.appspot.com"が返されます。これを行うことができるjavaまたはappengine APIはありますか?私は、手動で設定ファイルや定数から変更して読み込む必要はありません。appengineアプリの現在のサーバーURLを取得するにはどうすればよいですか?

ありがとうございました。

  • Aleem

答えて

7

あなたはgetServerName()を使用することができるはずです。

boolean local = "localhost".equals(httpServletRequest.getServerName()); 

例えば、あなたがより多くの情報が必要な場合にも使用することができ、他の方法がありますが、 getServerPort()。これは、AppEngineの上でJavaで私のために働いている

+0

すごくうれしかった - ありがとう! – aloo

8

(あなたが提供webapp基本フレームワークを使用している場合)ここでは、あなたの要求ハンドラでそれを行うには方法のカップルです:

def get(self): 
    self.response.out.write(self.request.headers.get('host', 'no host')) 
    self.response.out.write('<br>\n') 
    who = wsgiref.util.request_uri(self.request.environ) 
    self.response.out.write(who + '<br>\n') 

これは「ローカルホストを発します。 8081 'または' blabla.appspot.com 'を最初の行として使用し、もう1つは完全なURIの代わりに使用します(例: 'http://localhost:8081/zup'または 'http://blabla.appspot.com/zup'。

さらに一般的には、wsgiref.utilを使用すると、WSGI環境の情報を簡単に抽出できます。また、App EngineはWSGIの上で動作するため、いつでも、どのようなフレームワークからでもそのような環境を簡単に取り出すことができます;-)選ばれた

+1

のJava、Pythonのではありません! –

+9

Pythonの回答をお寄せいただき、ありがとうございます。 –

+1

@Gordon、これはあなたに便利だと分かっています(たとえ私がタグに適切な注意を払っていなかったとしても)。 –

10

String hostUrl; 
String environment = System.getProperty("com.google.appengine.runtime.environment"); 
if (StringUtils.equals("Production", environment)) { 
    String applicationId = System.getProperty("com.google.appengine.application.id"); 
    String version = System.getProperty("com.google.appengine.application.version"); 
    hostUrl = "http://"+version+"."+applicationId+".appspot.com/"; 
} else { 
    hostUrl = "http://localhost:8888"; 
} 
+1

StringUtils.equals?! –

0

私はこれが回答されている知っているが、別の1がミックスにスローします。

import com.google.apphosting.api.ApiProxy; 

... 

final ApiProxy.Environment env = ApiProxy.getCurrentEnvironment(); 
final Map<String, Object> attributes = env.getAttributes(); 
final String hostAndPort = (String) attributes.get("com.google.appengine.runtime.default_version_hostname"); 
final String url = "http://" + hostAndPort + "/"; 

参考:https://cloud.google.com/appengine/docs/java/appidentity/#Java_Asserting_identity_to_other_App_Engine_apps

関連する問題