Frage

Ich versuche, die Server-URL einer aktuell laufende appengine Java-Anwendung von Code zu erhalten. Das heißt, wenn der App auf meiner lokalen Dev-Maschine läuft würde Ich mag irgendwie „ http bekommen zurückgegeben: // localhost: 8080 „aber wenn es in prod läuft würde Ich mag zurückzusenden“ http://myappid.appspot.com “. Gibt es Java oder appengine API, die dies tun können? Ich möchte nicht haben, um manuell zu ändern und aus einer Konfigurationsdatei oder eine Konstante lesen.

Danke.

  • Aleem
War es hilfreich?

Lösung

Sie sollten in der Lage sein getServerName () zu verwenden:

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

Es gibt andere Methoden, die Sie auch, wenn Sie weitere Informationen verwenden können, benötigen, beispielsweise getServerPort ().

Andere Tipps

Dies funktioniert für mich in Java auf 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";
}

Hier ist ein paar, wie es in Ihren Request-Handler zu tun (wenn Sie die mitgelieferte webapp elementarer Framework verwenden):

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

Dieses emittiert ‚localhost: 8081‘ oder ‚blabla.appspot.com‘ als erste Zeile, und als die zweite, wie die vollständige URI statt, z.B. ' http: // localhost: 8081 / zup ' oder ‚ http://blabla.appspot.com/zup ‘.

Generell können Sie wsgiref.util verwenden leicht Informationen zu extrahieren, aus jeder WSGI Umgebung, und da App Engine dient oben auf WSGI es immer einfache Möglichkeiten sollte eine solche Umgebung aus den Klauen was Rahmen Sie sich entschieden haben hebeln ; -)

Ich weiß, das beantwortet wurde, aber ein anderer in den Mix zu werfen;

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top