वेब प्रोग्रामिंग

यह अध्याय NET के वेब प्रोग्रामिंग उप-प्रकरण को नामित प्रौद्योगिकियों के बंडल के रूप में ढकता है: चिह्नांकन व क्लाइंट-पक्ष गतिकता हेतु HTML/DHTML, संरचित आँकड़ा-विनिमय हेतु XML, स्क्रिप्टिंग भाषाएँ, तथा Java की सर्वर-पक्ष वेब प्रौद्योगिकियाँ (सर्वलेट, एप्लेट) — जिनमें से किसी को भी GATE CS का पाठ्यक्रम बिल्कुल नहीं छूता।

HTML, DHTML व XML

  • HTML नेस्टेड टैगों की चिह्नांकन भाषा है जो पृष्ठ की स्थैतिक संरचना व विषय-वस्तु वर्णित करती है, ब्राउज़र द्वारा रेंडर की गई; यह प्रोग्रामिंग भाषा नहीं है (कोई अपने चर, लूप या सशर्त नहीं)।
  • DHTML (गतिक HTML) पृथक भाषा नहीं बल्कि एक संयोजन है — HTML + CSS + क्लाइंट-पक्ष स्क्रिप्टिंग (JavaScript) + DOM — जो पृष्ठ को लोड होने के बाद उपयोगकर्ता-घटनाओं की प्रतिक्रिया में, पूर्ण पृष्ठ पुनः-लोड के बिना, अपनी विषय-वस्तु, शैली व संरचना बदलने देता है।
  • XML (विस्तारणीय चिह्नांकन भाषा) प्रस्तुति के बजाय संरचित आँकड़ा-विनिमय हेतु स्वनिर्धारित टैग परिभाषित करता है — HTML की स्थिर टैग-शब्दावली के विपरीत, XML दस्तावेज़ के अपने टैग अनुप्रयोग द्वारा परिभाषित किए जाते हैं (प्रायः DTD या XML स्कीमा से मान्य किए गए), जो XML को प्रदर्शन-प्रारूप के बजाय आँकड़ा-विनिमय प्रारूप बनाता है।

स्क्रिप्टिंग भाषाएँ: क्लाइंट-पक्ष बनाम सर्वर-पक्ष

स्क्रिप्टिंग भाषा (क्लाइंट-पक्ष JavaScript, या सर्वर-पक्ष स्क्रिप्टिंग भाषा) सामान्यतः संकलित के बजाय निर्वचित, गतिक-रूप से टाइप्ड होती है, तथा पूरा तंत्र नए सिरे से बनाने के बजाय विद्यमान घटकों को जोड़ने व व्यवहार जोड़ने हेतु प्रयुक्त होती है — क्लाइंट-पक्ष स्क्रिप्टिंग पृष्ठ के वितरित होने के बाद ब्राउज़र में चलती है, जबकि सर्वर-पक्ष स्क्रिप्टिंग पृष्ठ के भेजे जाने से पहले ही सर्वर पर चलती है, प्रति अनुरोध गतिक रूप से HTML उत्पन्न करते हुए।

वेब पर Java: एप्लेट व सर्वलेट

ℹ️ एप्लेट व सर्वलेट Java वेब कहानी के विपरीत आधे हैं
Java एप्लेट क्लाइंट-पक्ष है: वेब-पृष्ठ में अंतःस्थापित छोटा Java प्रोग्राम, डाउनलोड होकर उपयोगकर्ता के ब्राउज़र के भीतर चलता है (ऐतिहासिक रूप से JVM प्लगइन के भीतर), जिसकी जीवनचक्र-विधियाँ init/start/stop/destroy ब्राउज़र द्वारा बुलाई जाती हैं। Java सर्वलेट सर्वर-पक्ष है: सर्वर-पक्ष कंटेनर (उदा० Tomcat) के भीतर चलता Java क्लास, जो HTTP अनुरोध प्राप्त कर HTTP प्रतिक्रिया उत्पन्न करता है — इसका अपना जीवनचक्र init/service/destroy है, ब्राउज़र के बजाय कंटेनर द्वारा बुलाया गया। एप्लेट आज प्रभावी रूप से अप्रचलित हैं (ब्राउज़रों ने उन्हें चाहिए वाला प्लगइन-समर्थन हटा दिया), पर वे जो क्लाइंट-पक्ष/सर्वर-पक्ष भेद दर्शाते हैं वही ठीक वह है जो NET प्रश्न परखता है।

क्लाइंट-सर्वर प्रतिरूप व HTTP अनुरोध-प्रतिक्रिया चक्र

हर वेब-अंतःक्रिया वही आकार अनुसरण करती है: क्लाइंट (ब्राउज़र) एक विधि (GET प्राप्ति हेतु, POST आँकड़ा प्रस्तुत करने हेतु) व URL नामित करता HTTP अनुरोध भेजता है; सर्वर उसे प्रक्रमित करता है — स्थैतिक फ़ाइल-सर्वर बस डिस्क से फ़ाइल पढ़ता है, जबकि गतिक सर्वर (सर्वलेट या स्क्रिप्टिंग इंजन चलाता) तत्काल प्रतिक्रिया बनाने हेतु कोड निष्पादित करता है — और स्थिति-कूट (200 OK, 404 Not Found, 500 Internal Server Error, 301 Redirect) व एक मुख्य-भाग (सामान्यतः HTML) सहित HTTP प्रतिक्रिया लौटाता है। सत्र व कुकी इसलिए विद्यमान हैं कि HTTP स्वयं स्टेटलेस है — अन्यथा सर्वर को एक अनुरोध व अगले के बीच क्लाइंट की कोई स्मृति नहीं रहती।

मुख्य बिंदु

  • HTML चिह्नांकन है, प्रोग्रामिंग भाषा नहीं; DHTML बिना पुनः-लोड लोड हुए पृष्ठ को बदलने हेतु संयुक्त HTML+CSS+स्क्रिप्टिंग+DOM है।
  • XML HTML के स्थिर प्रदर्शन-उन्मुख टैग-समुच्चय के विपरीत, संरचित आँकड़ा-विनिमय हेतु स्वनिर्धारित, अनुप्रयोग-विशिष्ट टैग परिभाषित करता है।
  • क्लाइंट-पक्ष स्क्रिप्टिंग वितरण के बाद ब्राउज़र में चलती है; सर्वर-पक्ष स्क्रिप्टिंग सर्वर पर चलती है, हर पृष्ठ का HTML भेजे जाने से पहले उत्पन्न करते हुए।
  • Java एप्लेट क्लाइंट-पक्ष है (ब्राउज़र में चलता है); सर्वलेट सर्वर-पक्ष है (सर्वर-कंटेनर में चलता है) — उसी क्लाइंट-सर्वर प्रतिरूप के विपरीत आधे।

अभ्यास प्रश्न (8)

उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।

  1. HTML अकेले इसका सर्वोत्तम वर्णन है:

    1. पृष्ठ की संरचना वर्णित करने वाली चिह्नांकन भाषा, बिना अपने चर या लूप के
    2. पूर्ण-विशेषताओं वाली प्रक्रियात्मक प्रोग्रामिंग भाषा
    3. आँकड़ाकोश प्रश्न-भाषा
    4. सर्वर-पक्ष स्क्रिप्टिंग भाषा
    उत्तर देखें

    उत्तर: A — पृष्ठ की संरचना वर्णित करने वाली चिह्नांकन भाषा, बिना अपने चर या लूप के

    HTML के अपने कोई नियंत्रण-प्रवाह निर्माण नहीं हैं — गतिकता हेतु उसके ऊपर परतित एक पृथक स्क्रिप्टिंग भाषा चाहिए, जो ठीक वही है जो DHTML जोड़ता है।
  2. DHTML का सर्वोत्तम बोध यह है:

    1. HTML, CSS, क्लाइंट-पक्ष स्क्रिप्टिंग व DOM का संयोजन, पृथक भाषा नहीं
    2. HTML का स्थान लेने वाली पूर्णतः नई चिह्नांकन भाषा
    3. सर्वर-पक्ष आँकड़ाकोश प्रौद्योगिकी
    4. वेब-पृष्ठों हेतु संकलित द्विआधारी प्रारूप
    उत्तर देखें

    उत्तर: A — HTML, CSS, क्लाइंट-पक्ष स्क्रिप्टिंग व DOM का संयोजन, पृथक भाषा नहीं

    DHTML किसी एकल नई भाषा के बजाय विद्यमान प्रौद्योगिकियों के उस संयोजन को नाम देता है जो साथ काम करते हुए पृष्ठ को लोड होने के बाद बदलने देता है।
  3. HTML के विपरीत, XML:

    1. अनुप्रयोग को संरचित आँकड़े हेतु अपने स्वनिर्धारित टैग परिभाषित करने देता है
    2. टैगों की स्थिर, अपरिवर्तनीय शब्दावली रखता है
    3. किसी भी स्कीमा से मान्य नहीं किया जा सकता
    4. विशेष रूप से प्रदर्शन/प्रस्तुति प्रारूप है
    उत्तर देखें

    उत्तर: A — अनुप्रयोग को संरचित आँकड़े हेतु अपने स्वनिर्धारित टैग परिभाषित करने देता है

    XML के टैग विस्तारणीय व अनुप्रयोग-परिभाषित हैं (इसीलिए नाम), सामान्यतः DTD या XML स्कीमा से मान्य किए गए — HTML के स्थिर, प्रस्तुति-उन्मुख टैग-समुच्चय के विपरीत।
  4. क्लाइंट-पक्ष स्क्रिप्टिंग की तुलना में, सर्वर-पक्ष स्क्रिप्टिंग चलती है:

    1. सर्वर पर, हर पृष्ठ की विषय-वस्तु ब्राउज़र को भेजे जाने से पहले उत्पन्न करते हुए
    2. ब्राउज़र में, पृष्ठ के पहले ही वितरित हो जाने के बाद
    3. केवल मोबाइल युक्तियों पर
    4. कहीं नहीं; सर्वर-पक्ष स्क्रिप्टिंग विद्यमान ही नहीं है
    उत्तर देखें

    उत्तर: A — सर्वर पर, हर पृष्ठ की विषय-वस्तु ब्राउज़र को भेजे जाने से पहले उत्पन्न करते हुए

    सर्वर-पक्ष स्क्रिप्टिंग वितरण से पहले निष्पादित होती है और वह HTML उत्पन्न करती है जो फिर भेजा जाता है; क्लाइंट-पक्ष स्क्रिप्टिंग वह है जो बाद में, ब्राउज़र में, पहले ही वितरित पृष्ठ पर चलती है।
  5. Java सर्वलेट की जीवनचक्र-विधियाँ (init, service, destroy) इसके द्वारा बुलाई जाती हैं:

    1. वह सर्वर-पक्ष कंटेनर जिसके भीतर यह चलता है (उदा० Tomcat)
    2. उपयोगकर्ता का वेब-ब्राउज़र
    3. सीधे आँकड़ाकोश इंजन
    4. DNS विवेचक
    उत्तर देखें

    उत्तर: A — वह सर्वर-पक्ष कंटेनर जिसके भीतर यह चलता है (उदा० Tomcat)

    सर्वलेट सर्वर-पक्ष घटक है जिसका जीवनचक्र पूर्णतः उस कंटेनर द्वारा प्रबंधित होता है जिसमें इसे तैनात किया गया है, एप्लेट के जीवनचक्र के विपरीत, जो उस ब्राउज़र द्वारा बुलाया जाता था जिसके भीतर यह चलता था।
  6. Java एप्लेट के विषय में निम्नलिखित में कौन सत्य हैं? (एक से अधिक विकल्प सही हो सकते हैं।)

    1. यह क्लाइंट-पक्ष चलता है, उपयोगकर्ता के ब्राउज़र के भीतर
    2. यह आज प्रभावी रूप से अप्रचलित है क्योंकि ब्राउज़रों ने इसे चाहिए वाला प्लगइन-समर्थन हटा दिया
    3. यह विशेष रूप से सर्वर पर चलता है
    4. इसकी जीवनचक्र-विधियाँ ब्राउज़र द्वारा बुलाई जाती हैं
    उत्तर देखें

    उत्तर: A — यह क्लाइंट-पक्ष चलता है, उपयोगकर्ता के ब्राउज़र के भीतर; B — यह आज प्रभावी रूप से अप्रचलित है क्योंकि ब्राउज़रों ने इसे चाहिए वाला प्लगइन-समर्थन हटा दिया; D — इसकी जीवनचक्र-विधियाँ ब्राउज़र द्वारा बुलाई जाती हैं

    एप्लेट क्लाइंट-पक्ष प्रौद्योगिकी है जिसका जीवनचक्र (init/start/stop/destroy) उस ब्राउज़र द्वारा संचालित होता है जिसके भीतर यह चलता है; ब्राउज़र विक्रेताओं द्वारा प्लगइन-समर्थन हटाए जाने ने एप्लेट को प्रभावी रूप से अप्रचलित बना दिया है, जो विशेष रूप से सर्वर पर चलने के विपरीत है।
  7. नेस्टेड स्वनिर्धारित टैगों से परिभाषित व प्रायः DTD या स्कीमा से मान्य किए गए, तंत्रों के बीच मुख्यतः संरचित आँकड़ा-विनिमय (प्रदर्शन नहीं) हेतु प्रयुक्त उस दस्तावेज़-प्रारूप का नाम बताइए।

    संख्यात्मक उत्तर — मान टाइप करें।

    उत्तर देखें

    उत्तर: XML

    XML (विस्तारणीय चिह्नांकन भाषा) अनुप्रयोग को संरचित आँकड़े हेतु अपनी टैग-शब्दावली परिभाषित करने देता है, HTML के स्थिर, प्रस्तुति-उन्मुख टैगों से भिन्न।
  8. HTTP को स्टेटलेस प्रोटोकॉल वर्णित किया जाता है, जो मुख्यतः इसका कारण है:

    1. सत्र व कुकी विद्यमान हैं, ताकि सर्वर कई अनुरोधों के आर-पार उसी क्लाइंट को पहचान सके
    2. सर्वर एक समय एक से अधिक क्लाइंट को कभी प्रतिक्रिया नहीं दे सकता
    3. वेब-पृष्ठ कभी छवियाँ नहीं रख सकते
    4. XML ने HTTP का स्थान पूर्णतः ले लिया
    उत्तर देखें

    उत्तर: A — सत्र व कुकी विद्यमान हैं, ताकि सर्वर कई अनुरोधों के आर-पार उसी क्लाइंट को पहचान सके

    अनुरोधों के बीच क्लाइंट की किसी अंतर्निहित स्मृति के बिना, स्टेटलेस HTTP सर्वर हर अनुरोध को मानो किसी अजनबी से मानेगा — सत्र (पहचानकर्ता से कुंजीबद्ध सर्वर-पक्ष स्थिति) व कुकी (क्लाइंट-पक्ष संचित वह पहचानकर्ता) ठीक वही क्रियाविधि है जो इसे दूर करने हेतु HTTP के ऊपर बनाई गई है।