2010-02-02 6 views
17

मैं servlets का अध्ययन कर रहा हूं, मैं getLocalPort() और getServerPort() के बीच एक संदेह अंतर के साथ आया हूं। यहां getLocalPort() का मतलब केवल सर्वर पक्ष है तो getServerPort() का अर्थ क्या है?servlet में getLocalPort() और getServerPort() के बीच अंतर

धन्यवाद।

उत्तर

19

एक साधारण सेटअप में (जहां आपका एप्लिकेशन सर्वर/सर्वलेट कंटेनर सीधे क्लाइंट के अनुरोध को स्वीकार करता है) दोनों विधियां समान मान लौटाएंगी।

जब सर्वलेट कंटेनर क्लाइंट अनुरोध स्वीकार नहीं करता है (उदाहरण के लिए जब आप अनुरोध स्वीकार करने के लिए mod_jk के साथ अपाचे HTTP सर्वर का उपयोग करते हैं और AJP के माध्यम से टॉमकैट आवृत्ति के अनुरोध को अग्रेषित करते हैं), तो getServerPort() वापस लौटाएगा पोर्ट को क्लाइंट से कनेक्ट करें (शायद 80, जब डिफ़ॉल्ट पोर्ट का उपयोग किया जाता है) और getLocalPort() उस पोर्ट को वापस कर देगा जो टोमकैट HTTP सर्वर (शायद 800 9 या कुछ समान) से कनेक्शन स्वीकार करता था।

6

देखते हैं क्या जावाडोक getLocalPort() के बारे में कह रहा है दो:

रिटर्न इंटरफ़ेस जिस पर अनुरोध प्राप्त हुआ था की इंटरनेट प्रोटोकॉल (आईपी) पोर्ट संख्या।

और यही हम getServerPort() बारे में पढ़ सकते है:

रिटर्न जो करने के लिए अनुरोध भेजा जाता पोर्ट संख्या। मेजबान हेडर वैल्यू में, यदि कोई है, या सर्वर पोर्ट जहां क्लाइंट कनेक्शन स्वीकार किया गया था, तो ":" के बाद भाग का मान है।

तो, एक ग्राहक http://mydomain.com:80/ के लिए एक अनुरोध है कि है तो "कराई" एक और बंदरगाह पर एक कंटेनर सुन (और शायद एक और मशीन) को भेजता है, तो getServerPort()80 वापस आ जाएगी और getLocalPort() लिए कंटेनर के बंदरगाह वापस आ जाएगी जिस अनुरोध को अग्रेषित किया गया था, मान लें कि उस पोर्ट को सुनकर वेबलॉगिक उदाहरण के लिए 7001 कहें।

+1

मैंने पहली बार प्रश्न पढ़ते समय एपीआई पढ़ा, और यह तुरंत मेरे लिए स्पष्ट नहीं था कि जब तक मैंने जोआचिम के जवाब को देखा (और मैं इसे जीवित रहने के लिए करता हूं) तो अंतर क्या था। तो मुझे लगता है कि अंतर के साथ संघर्ष करने के लिए मूल पोस्टर (जो "सर्वलेट का अध्ययन" कर रहा है) के लिए यह काफी उचित है। –

+1

@ जैक बिल्कुल, मैंने केवल एपीआई दस्तावेज़ को संदर्भ के रूप में चिपकाया (और होस्ट हेडर सामान के लिए)। –

1

मैं सर्वर पोर्ट के घाट और बिलाव के कार्यान्वयन को देखा, और यह मेरा निष्कर्ष है:

  1. अनुरोध URL उस में एक बंदरगाह संख्या है जब (जैसे http (s): // वेबसाइट।कॉम: 8888/blah/बकवास करना), getServerPort() हमेशा लौट क्या है (उदाहरण के लिए, 8888) अनुरोध URL में शामिल किया गया था
  2. अनुरोध URL उस में एक पोर्ट संख्या है, तो
      नहीं है जब यदि
      • बिलाव = सच SSLEnabled देखता
      • 443 लौटा दी जाएगी
      • जेट्टी देखता स्कीमा = https
    • 80 लौटा दी जाएगी अगर
      • SSLEnabled देखता = false
      • जेट्टी देखता स्कीमा = http

इसलिए, getServerPort() अपाचे HTTP सर्वर या लोड संतुलन यह के सामने बैठे के साथ कोई संबंध नहीं है (यदि कोई भी), या आईपी टेबल मार्ग टॉमकैट/जेट्टी सर्वर पर बैठे हैं। वे हमेशा http/https के आधार पर मानक पोर्ट नंबर वापस कर देंगे, जब तक अनुरोध URL में कोई पोर्ट नंबर निर्दिष्ट नहीं किया जाता है।

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