2009-06-18 21 views
9

Próbuję uzyskać adres URL serwera aktualnie uruchomionej aplikacji java appengine z kodu. Oznacza to, że jeśli aplikacja działa na mojej lokalnej maszynie programistycznej, chciałbym jakoś odzyskać "http://localhost:8080", ale jeśli jest uruchomiona w prod, chciałbym być zwrócony "http://myappid.appspot.com". Czy są jakieś API Java lub Appengine, które mogą to zrobić? Chciałbym nie mieć ręcznie zmienić i odczytać z pliku konfiguracyjnego lub stałej.Jak uzyskać bieżący adres URL aplikacji Appengine?

Dzięki.

  • Aleem

Odpowiedz

7

Powinieneś być w stanie wykorzystać getServerName():

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

Istnieją inne metody można również użyć, jeśli potrzebujesz więcej informacji, np getServerPort().

+0

Świetnie, że działało - dziękuję! – aloo

8

Oto kilka sposób to zrobić w swojej obsługi żądania (jeśli używasz dostarczonego webapp elementarne ramy):

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

ten emituje „localhost: 8081 "lub" blabla.appspot.com "jako pierwszy wiersz, a jako drugi, jak pełny URI zamiast, np. "http://localhost:8081/zup" lub "http://blabla.appspot.com/zup".

Ogólnie rzecz biorąc, można użyć wsgiref.util, aby łatwo wyodrębnić informacje z dowolnego środowiska WSGI, a ponieważ App Engine służy na WSGI, zawsze powinny istnieć proste sposoby na podważenie takiego środowiska ze szponów jakiejkolwiek struktury, którą posiadasz wybrany ;-)

+1

Java, Python nie! –

+9

Dzięki za udzielenie odpowiedzi w Pythonie, jako ktoś, kto przyszedł szukać odpowiedzi w Pythonie. –

+1

@Gordon, cieszę się, że okazało się to przydatne (mimo że nie zwróciłem należytej uwagi na znaczniki!). –

10

To działa na mnie w Javie na AppEngine:

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

wiem, że to zostało odebrane, ale jeszcze jeden, aby rzucić się w mieszance;

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

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

Powiązane problemy