2009-06-18 13 views
9

मैं कोड से वर्तमान में चल रहे एपेंगेन जावा ऐप का सर्वर यूआरएल प्राप्त करने का प्रयास कर रहा हूं। यही है, अगर ऐप मेरी स्थानीय देव मशीन पर चल रहा है, तो मैं किसी भी तरह से "http://localhost:8080" वापस लौटना चाहूंगा, लेकिन अगर यह प्रोड में चल रहा है तो मैं "http://myappid.appspot.com" वापस लौटना चाहता हूं। क्या कोई जावा या एपेंगिन एपीआई है जो यह कर सकता है? मैं कॉन्फ़िगरेशन फ़ाइल या निरंतर से मैन्युअल रूप से बदलने और पढ़ने के लिए नहीं चाहता हूं।ऐपेंजिन ऐप का वर्तमान सर्वर यूआरएल कैसे प्राप्त करें?

धन्यवाद।

  • अलीम

उत्तर

7

आप getServerName() का उपयोग करने में सक्षम होना चाहिए:

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

वहाँ अन्य तरीकों आप भी अगर आप अधिक जानकारी की आवश्यकता है उपयोग कर सकते हैं, उदाहरण के लिए कर रहे हैं getServerPort()।

+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 'पहली पंक्ति के रूप में, और दूसरे के रूप में पूर्ण यूआरआई की तरह, उदाहरण के लिए 'http://localhost:8081/zup' या 'http://blabla.appspot.com/zup'।

अधिक आम तौर पर, आप किसी भी डब्लूएसजीआई पर्यावरण से आसानी से जानकारी निकालने के लिए wsgiref.util का उपयोग कर सकते हैं, और चूंकि ऐप इंजन डब्लूएसजीआई के शीर्ष पर कार्य करता है, इसलिए आपके पास जो भी ढांचा है, उस तरह के पर्यावरण से छेड़छाड़ करने के लिए हमेशा आसान तरीके होना चाहिए चुने हुए ;-)

+1

जावा, नहीं अजगर! –

+9

पायथन जवाब देने के लिए धन्यवाद, हालांकि, जो कोई पाइथन में जवाब की तलाश में आया था। –

+1

@ गॉर्डन, खुशी है कि यह आपके लिए उपयोगी साबित हुआ (भले ही मैंने टैग की उचित सूचना नहीं ली थी!)। –

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

मैं इस उत्तर दिया गया है पता है, लेकिन एक और एक मिश्रण करने के लिए में फेंक करने के लिए;

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

संबंधित मुद्दे