Question

J'essaie d'obtenir l'URL du serveur d'une application Java en cours d'exécution à partir du code. Autrement dit, si l'application est exécutée sur ma machine de développement locale, je souhaite en quelque sorte être renvoyé & http: // localhost: 8080 " mais si cela fonctionne, je souhaiterais être renvoyé & http://myappid.appspot.com " ;. Existe-t-il des API Java ou Appengine pouvant le faire? Je voudrais ne pas avoir à modifier manuellement et lire à partir d'un fichier de configuration ou une constante.

Merci.

  • Aleem
Était-ce utile?

La solution

Vous devriez pouvoir utiliser getServerName ():

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

Il existe d’autres méthodes que vous pouvez également utiliser si vous avez besoin de plus d’informations, par exemple. getServerPort ().

Autres conseils

Cela fonctionne pour moi en Java sur 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";
}

Voici quelques façons de le faire dans votre gestionnaire de demandes (si vous utilisez le cadre élémentaire webapp fourni):

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

Ceci émet 'localhost: 8081' ou 'blabla.appspot.com' comme première ligne, et comme seconde comme l'URI complet à la place, par ex. ' http: // localhost: 8081 / zup ' ou ' http://blabla.appspot.com/zup '.

Plus généralement, vous pouvez utiliser wsgiref.util pour extraire facilement les informations de tout environnement WSGI. Et puisque App Engine est utilisé en plus de WSGI, il doit toujours exister des moyens simples de extraire un tel environnement. les embrayages de n'importe quel cadre que vous avez choisi; -)

Je sais que cela a été répondu, mais un autre à jeter dans le mélange;

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

Référence: https://cloud.google.com/appengine/docs / java / appidentity / # Java_Asserting_identity_to_other_App_Engine_apps

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top