Java webapps .do एक्सटेंशन का उपयोग क्यों करते हैं? यह कहां से आया?


114

मैंने हमेशा सोचा है कि इतने सारे जावा डेवलपर्स अपने वेब नियंत्रक (एमवीसी) संसाधनों के विस्तार के रूप में ".do" का उपयोग क्यों करते हैं। उदाहरण: http://example.com/register.do

जैसा कि मैंने इसे स्प्रिंग एमवीसी और स्ट्रट्स प्रोजेक्ट्स में देखा है, यह फ्रेमवर्क विशिष्ट प्रतीत नहीं होता है। यह ".do" विस्तार अभ्यास कहां से आया। बिना विस्तार के ऐसा क्यों किया गया? मुझे लगता है कि मैंने इस पर जावा विश्व ज्ञापन को याद किया।

व्यक्तिगत रूप से मुझे कोई एक्सटेंशन पसंद नहीं है।


4
उन लोगों के लिए अनुकूल नोट जो ".do" से माइग्रेट करना चाहते हैं और उनके अनुकूल URLS हैं। एक्सटेंशन के बजाय सर्वलेट पथ का प्रयोग करें / do / login और फिर Tuckey Filter URL को फिर से लिखने के लिए / do / login ==> / login का उपयोग करें।
एडम जेंट

सही है, URL पुनर्लेखन (यह mod_rewrite या Tuckey के फ़िल्टर के माध्यम से हो) चाल को करेगा।
पास्कल थिवेंट

1
यह बहुत ही मूर्खतापूर्ण है, और इसके लिए कोई बहाना नहीं है।
विवादास्पद

जवाबों:


75

मेरी जानकारी के लिए, यह सम्मेलन स्ट्रट्स 1 द्वारा फैलाया गया है। उपयोगकर्ता गाइड इसे इस तरह डालता है:

5.4.2 ActionServlet मैपिंग कॉन्फ़िगर करें

नोट: इस खंड की सामग्री स्ट्रट्स के लिए विशिष्ट नहीं है। जावा सर्वलेट स्पेसिफिकेशन में सर्वलेट मैपिंग के विन्यास को परिभाषित किया गया है। यह अनुभाग किसी एप्लिकेशन को कॉन्फ़िगर करने के सबसे सामान्य साधनों का वर्णन करता है।

URL को परिभाषित करने के लिए दो सामान्य दृष्टिकोण हैं जो नियंत्रक सर्वलेट द्वारा संसाधित होंगे - उपसर्ग मिलान और विस्तार मिलान। प्रत्येक दृष्टिकोण के लिए एक उपयुक्त मानचित्रण प्रविष्टि नीचे वर्णित की जाएगी।

उपसर्ग मिलान का मतलब है कि आप सभी URL चाहते हैं जो (संदर्भ पथ भाग के बाद) एक विशेष मान के साथ इस सर्वलेट को पारित किया जाए। इस तरह की प्रविष्टि इस तरह दिख सकती है:

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/do/*</url-pattern>
</servlet-mapping>

जिसका अर्थ है कि /logonपहले से वर्णित पथ से मेल करने के लिए एक अनुरोध URI इस तरह दिख सकता है:

http://www.mycompany.com/myapplication/do/logon

/myapplicationवह संदर्भ पथ कहां है जिसके तहत आपका एप्लिकेशन तैनात है।

दूसरी ओर, एक्सटेंशन मैपिंग, इस तथ्य के आधार पर कार्रवाई के सर्वलेट के लिए URI से अनुरोध करता है कि URI एक निर्धारित अवधि के बाद समाप्त हो जाता है। उदाहरण के लिए, JSP प्रोसेसिंग सर्वलेट को *.jspपैटर्न पर मैप किया जाता है, ताकि इसे अनुरोध किए गए प्रत्येक JSP पेज को प्रोसेस करने के लिए कहा जाए। एक्सटेंशन का उपयोग करने के लिए *.do(जिसका अर्थ है "कुछ करें") , मैपिंग प्रविष्टि इस तरह दिखाई देगी:

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

और /logonपहले से वर्णित पथ से मेल करने के लिए एक अनुरोध URI इस तरह दिख सकता है:

http://www.mycompany.com/myapplication/logon.do

चेतावनी - यदि आप <servlet-mapping>नियंत्रक सर्वलेट के लिए एक से अधिक तत्वों को परिभाषित करते हैं तो फ्रेमवर्क सही ढंग से संचालित नहीं होगा ।

चेतावनी - यदि आप संस्करण 1.1 के बाद से नए मॉड्यूल समर्थन का उपयोग कर रहे हैं, तो आपको पता होना चाहिए कि केवल एक्सटेंशन मैपिंग समर्थित है।

और मुझे लगता है कि यह सम्मेलन रखा गया है (कभी-कभी स्ट्रट्स 1 को बदलने के बाद भी URL नहीं बदलना चाहिए, कभी-कभी सिर्फ इसलिए कि लोग इससे खुश थे)।


2
मुझे लगा कि यह स्ट्रट्स 1 है। इतनी देर पहले मैं भूल गया होगा। जावा वेब देव के लिए वे अच्छे दिन नहीं थे।
एडम जेंट

4
@ उस समय (~ 2001), मैं स्ट्रट्स 1 से खुश था। आज इसका इस्तेमाल करने से मुझे रोना आता।
पास्कल थिवेंट

5
2001 में हम स्ट्रट्स 1 के लिए भाग्यशाली थे!
थोरबजर्न रेवन एंडरसन

2
स्ट्रट्स 2 के साथ हम सभी खुश रह सकते हैं!
अलिर्ज़ा फत्ताही

9

अपने स्ट्रट्स सर्वलेट को * .do में वेब पर लाने के लिए आम बात थी। स्ट्रेट्स सर्वलेट के लिए यूआरएल पास करने के लिए। उदाहरण के लिए:

<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

इसके लिए सम्मेलन को छोड़कर वास्तव में कोई कारण नहीं है। यदि आप किसी एक्सटेंशन का उपयोग नहीं करते हैं, तो आपको छवियों और अन्य स्थिर सामग्री को संभालने के लिए कुछ जादू करने की ज़रूरत है जो उन्हें आपके सेवलेट में नहीं भेजती है। अक्सर यह एक फ्रॉन्टिंग वेब सर्वर के लोड बैलेंसर पर किया जाता है।


2
मैं इसके बारे में नहीं जानता कि यह जादू है। यह सब एक मास्टर डिस्पैचिंग सर्वलेट है और शायद / myservlet / उपसर्ग होने से बचने के लिए कुछ URL पुनर्लेखन कर रहा है। Tuckey URL rewritting देखें।
एडम जेंट

-2

बस एक सुरक्षा टिप!

अपने नियंत्रक के लिए कुछ असामान्य विस्तार का उपयोग करना अच्छा है, इस तरह से घुसपैठियों को साइट के बारे में कुछ जानकारी खोजने के लिए अधिक समय बिताना होगा।

इसलिए यदि आप डिफ़ॉल्ट विस्तार को बदलते हैं, तो आपके ढांचे में कुछ कुछ स्टैटिक्स जो आपके हाथ को प्रकट कर सकते हैं, आपका एमवीसी ढांचा पूरी तरह से अज्ञात हो सकता है।

यहां तक ​​कि विस्तार को बदलने phpया aspxअच्छा विचार हो सकता है।

वास्तव में वास्तव में यह ओफिसकेशन द्वारा सुरक्षा है, लेकिन यह अच्छी सुरक्षा के विपरीत नहीं है। पहले से ही सुरक्षित सिस्टम के शीर्ष पर अस्पष्टता से सुरक्षा ले जाने से मदद मिल सकती है। आक्षेप से सुरक्षा के दिलचस्प पक्ष और विपक्ष हैं और जब वे दोनों इंटरनेट में उपयोग किए जा सकते हैं।


5
यह अस्पष्टता से सुरक्षा है।
TGO

वास्तव में यह मोटापा है
ब्रेंडन जी

4
अस्पष्टता अच्छी सुरक्षा के विपरीत नहीं है। यह जानकारी देने से इनकार करना कि ग्राहकों को शून्य की जरूरत है, एक अच्छा अभ्यास है। मेरी कंपनी में हमने सभी वेबसर्वर और ऐप सर्वर हेडर को स्क्रब किया और इसे एक निर्मित स्ट्रिंग के साथ बदल दिया। भेद्यता स्कैन की मात्रा यहां तक ​​कि अस्पष्ट साइटों को नट्स मिलता है, कुछ भी आप अपने आप को एक लक्ष्य से कम करने के लिए कर सकते हैं एक सकारात्मक है।
XP84

डिफ़ॉल्ट रूप से, प्रतिक्रिया शीर्षलेख चीजों को जानने के लिए पर्याप्त होगा।
कन्नन राममूर्ति
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.