2009-06-18 14 views
9

Şu anda çalışan bir appengine java uygulamasının sunucu URL'sini koddan almaya çalışıyorum. Yani, eğer uygulama yerel dev makinemde çalışıyorsa, bir şekilde "http://localhost:8080" cevabını almayı isterdim ama eğer prod'da çalışıyorsa "http://myappid.appspot.com" cevabını almak istiyorum. Bunu yapabilecek herhangi bir java veya appengine API'sı var mı? Bir yapılandırma dosyasından veya sabitden el ile değiştirmek ve okumak için sahip olmak istemiyorum.Appengine uygulamasının mevcut sunucu URL'si nasıl alınır?

Teşekkürler.

  • Burada (eğer sağlanan webapp ilköğretim çerçeve kullanıyorsanız) isteğiniz işleyicisi bunu yapmak için yol buradan bir kaç

cevap

7

sen GetServerName() kullanmak mümkün olmalıdır:

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

örn daha fazla bilgi gerekiyorsa eğer siz de kullanabileceğiniz diğer yöntemler vardır getServerPort(). Bu AppEngine'de Java benim için çalışıyor

+0

Bu işe yaradı - teşekkürler! – aloo

8

Aleem:

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') 

Bu 'localhost'u yayar: İlk satır olarak 8081 'veya' blabla.appspot.com 've ikincisi tam URI gibi 'http://localhost:8081/zup' veya 'http://blabla.appspot.com/zup'.

Daha genel olarak, herhangi bir WSGI ortamından kolayca bilgi almak için wsgiref.util'u kullanabilir ve App Engine'in WSGI'nin üzerinde hizmet verdiğinden, bu tür bir ortamı her türlü çerçevenin debriyajlarından ayırmanın kolay yolları olmalıdır. ;-) seçilen

+1

Java değil Python! –

+9

Python cevabını verdiğiniz için, Python'daki cevabı aramak için gelen bir kişi olarak teşekkür ederiz. –

+1

@Gordon, bu sizin için yararlı olduğunu sevindim (etiketlerin doğru bir şekilde uyarılmamasına rağmen!). –

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

Bu cevap olmuştur biliyorum ama başka bir karışımına atmak;

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 + "/"; 

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

İlgili konular