2011-04-29 15 views
5

मैं जावा एंटरप्राइज़ और स्प्रिंग के लिए नया हूं लेकिन मुझे मानक जावा का एक मजबूत समझ है। मैं एक मौजूदा वेब अनुप्रयोग परियोजना के माध्यम से देख रहा हूँ। प्रोजेक्ट टॉमकैट/स्प्रिंग/हाइबरनेट का उपयोग करता है जो मैं समझता हूं कि काफी आम है। यह रिमोट विधि आमंत्रण के लिए डीडब्लूआर का भी उपयोग करता है। मुझे जिम्मेदारियों को अलग करना मुश्किल हो रहा है: टॉमकैट क्या जिम्मेदार है, किस वसंत के लिए ज़िम्मेदार है, एक अनुरोध दूसरे से कैसे मिलता है, और कैसे वसंत के प्रमुख टुकड़े एक साथ फिट होते हैं। मैंने वसंत पर विशेष रूप से सेम और बीन कारखाने के बारे में बहुत सारे दस्तावेज पढ़े हैं और अभी भी और पढ़ने की प्रक्रिया में हैं। आपके पास किसी भी सलाह का स्वागत होगा, लेकिन मैं कुछ विशिष्ट प्रश्न प्रदान करूंगा।क्या कोई स्प्रिंग web.xml फ़ाइल समझा सकता है?

प्रश्न 1: कहाँ web.xml चीजों में फिट करता है (जब यह प्रयोग किया जाता है/कहा जाता है, और कहाँ से कहा जाता है)?

कोड का नमूना 1:

<servlet> 
    <servlet-name>qrst</servlet-name> 
     <display-name>qrst Servlet</display-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

ऊपर टुकड़ा क्या करता है (या, क्या यह तो होना ही कारण नहीं है)? मेरे वेब ऐप में किसी बिंदु पर qrst.jsp का उपयोग किया जाता है; क्या यह DispatcherServlet है जो servlet नाम का उपयोग कर qrst.jsp को कॉल करता है? अन्यथा सर्वलेट नाम का महत्व क्या है? स्टार्टअप पर लोड क्या है?

कोड का नमूना 2:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /someLocation/some-servlet.xml 
    </param-value> 
</context-param> 

लिंक या क्या ऊपर करता है की व्याख्या? मैं एक्सएमएल फ़ाइल को देखने से देख सकता हूं जिसमें इसमें बीन परिभाषाएं हैं और मैं समझता हूं कि बीन्स क्या हैं और उनका उपयोग कैसे किया जाता है, लेकिन मुझे इसके बारे में कोई अन्य जानकारी नहीं है और मैं चाहूंगा।

कोड का नमूना 3:

<servlet> 
    <servlet-name>dwr-invoker</servlet-name> 
    <display-name>DWR</display-name> 
    <servlet-class> 
     org.directwebremoting.servlet.DwrServlet 
</servlet-class> 
    <init-param> 
     <param-name>classes</param-name> 
     <param-value> 
      somepackage.someclass 
     </param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

मैं क्या सेम के बारे में पढ़ा से, मेरा मानना ​​है कि उन init-परम तत्व बस पैरामीटर सर्वलेट का जावा वर्ग में तैयार हो जाओ है। सर्वलेट नाम का महत्व क्या है, और स्टार्टअप पर लोड के बारे में क्या? वेब ऐप किसी भी तरह से "जानता है" जब एक AJAX (dwr) कॉल बनाम हो रहा है जब वेब ऐप पहली बार लोड किया जा रहा है (जब पहली बार लोड हो रहा है तो इसे qrst.jsp का उपयोग करना चाहिए)। यह कैसे पता है? Qrst.jsp के बजाय अनुरोध को डीडब्लूआर को रूट करने का निर्णय कैसे लेता है? यह कहां करता है?

धन्यवाद।

उत्तर

10

सर्वलेट्स HTTP requests जवाब देने के लिए JavaEE के मुहावरा है। आप एक सर्वलेट में अपने आवेदन का व्यवहार प्रोग्राम करते हैं जो अनुरोध का जवाब देगा।

टोमकैट एक सर्वलेट कंटेनर है, जिसका अर्थ है कि आप अपने आवेदन को टॉमकैट में तैनात करते हैं और यह आपके लिए सभी संचार बुनियादी ढांचे का प्रबंधन करेगा: यह कनेक्शन स्वीकार करता है, डेटाबेस कनेक्शन प्रबंधित करता है (*) और आने वाले अनुरोधों को संभालने के लिए आपके सर्वलेट्स पर कॉल करेगा।

web.xml किसी भी JavaEE आवेदन का हिस्सा है, वसंत नहीं। आपका कोड नमूना 1 घोषित करता है कि आपका ऐप इनकमिंग अनुरोधों को संभालने के लिए कक्षा org.springframework.web.servlet.DispatcherServlet के उदाहरण का उपयोग करेगा।

हालांकि जावालेट विकास के लिए सर्लेट मूलभूत नींव हैं, लेकिन इसे स्वयं बनाने की सलाह नहीं दी जाती है; इसके बजाय, वसंत के साथ, आप MVC controllers बनाते हैं। फिर DispatcherServlet अनुरोधों को संभालने के लिए इन नियंत्रकों पर कॉल करेगा। यह सिर्फ एक और संकेत है (लेकिन एक बहुत ही शक्तिशाली!)

क्या यह डिस्पैचर सर्वलेट है जो सर्वलेट नाम का उपयोग कर qrst.jsp को कॉल करता है?

सीधे नहीं। यह सिर्फ एक संयोग है कि आपकी सर्वलेट और जेएसपी फ़ाइल का एक ही नाम है।

स्टार्टअप पर क्या लोड किया जाता है?

आपका कोड नमूना 2 फ़ाइल /someLocation/some-servlet.xml से बीन्स लोड करने के लिए डिस्पैचर सर्वलेट को निर्देश देता है। यदि नियंत्रक सेम इस फ़ाइल में हैं और आपने यूआरएल मैपिंग को कॉन्फ़िगर करने के तरीके के अनुसार, इस फ़ाइल से सेम आने वाले अनुरोधों का उत्तर देंगे। the reference देखें।

मेरा मानना ​​है कि उन init-परम तत्व बस पैरामीटर सर्वलेट का जावा वर्ग

web.xml में init-परम तत्व सर्वलेट वर्ग के लिए कर रहे हैं में तैयार हो जाओ है।

वेब एप्लिकेशन किसी भी तरह "जानता" एक AJAX (डीडब्ल्यूआर) कॉल बनाम जब वेब अनुप्रयोग पहली बार के लिए लोड किया जा रहा है हो रहा है जब (जब पहली बार यह qrst.jsp का उपयोग करना चाहिए के लिए अपने लोड हो रहा है)। यह कैसे पता है?

सवाल से याद कर रहे हैं या तो <servlet-mapping> तत्व (web.xml में पाया जाता है), या url मानचित्रण (वसंत फ़ाइलों में पाया जाता है)। ये यह तय करने के लिए ज़िम्मेदार हैं कि प्रेषक सर्वलेट या डीआईआर सर्वलेट द्वारा यूआरएल को संभाला जाना चाहिए या नहीं।

उदाहरण के लिए, एक सर्वलेट मानचित्रण नीचे की तरह साथ:

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

फिर .do में समाप्त होने के किए गए सभी URL डिस्पैचर सर्वलेट द्वारा उत्तर दिया जाएगा, और .dwr के साथ समाप्त उन डीडब्ल्यूआर सर्वलेट द्वारा नियंत्रित किया जाएगा। यहां वह जगह है जहां सर्वलेट के नाम महत्वपूर्ण हैं।

जेएसपी फाइलें एक अलग कहानी हैं। कंटेनर बस * .jsp में समाप्त होने वाले यूआरएल को संभालने के लिए उनका उपयोग करेगा। *.jsp में समाप्त होने वाले यूआरएल के लिए अपना ऑनव सर्वलेट मैपिंग न बनाएं। यह केवल सिरदर्द का कारण बन जाएगा। यह शायद अनिर्दिष्ट व्यवहार है।

संपादित करें:

हालांकि, ब्राउज़र की पता पट्टी में URL हमेशा एक ही लग रहा है: यह हमेशा qrst सर्वलेट

तो यह संभव है आह्वान है कि आपके सर्वलेट-मानचित्रण इतना व्यापक है (कुछ ऐसा है: <url-pattern>/*</url-pattern>) कि यह सर्वर पर फेंकने वाली किसी भी चीज को संभालेगा और अन्य सर्लेटों को इसे संभालने का मौका कभी नहीं देगा।

अंतिम लेकिन कम से कम नहीं, डीडब्लूआर या किसी भी अजाक्स प्रौद्योगिकी के साथ काम करते समय, HttpFox extension for Firefox इंस्टॉल करें ताकि आप अपने आवेदन की अजाक्स कॉल की निगरानी कर सकें।

+0

धन्यवाद मदद के लिए बहुत कुछ। मेरे पास qrst और dwr-invoker दोनों के लिए परिभाषित एक सर्वलेट-मैपिंग है, तो आप जो कह रहे हैं वह मुझे समझ में आता है! हालांकि, ब्राउजर के एड्रेस बार में यूआरएल हमेशा दिखता है: यह हमेशा qrst servlet का आह्वान करेगा।अनुरोध करने से पहले जावास्क्रिप्ट कोड में यूआरएल सेट कर सकता है? मैंने पहले ही इसे थोड़ा सा देखा है लेकिन ऐसा कुछ भी नहीं दिख रहा है, अगर मैं सही रास्ते पर हूं तो मैं देख रहा हूं। – KyleM

+0

कुछ-servlet.xml में, एक विशेषता "वर्ग" वाले दो तत्व होते हैं जिनमें "नियंत्रक" होता है। एक मुख्य है, और दूसरा डीडब्लूआर के लिए है! तो ऐसा लगता है कि डिस्पैचर सर्वलेट शायद उचित विकल्प चुनने के लिए चुनता है, क्या वह समझदार लगता है? और मुझे अभी घर जाना है, लेकिन मैं सोमवार को आपके लिंक एप को देखूंगा। मदद के लिए एक लाख धन्यवाद, मैं वास्तव में आपको यह नहीं बता सकता कि मैं इसकी कितनी सराहना करता हूं। – KyleM

+0

सभी मदद के लिए धन्यवाद, मैं आपको यह नहीं बता सकता कि मैं इसकी कितनी सराहना करता हूं, मैं आपकी महान पोस्ट के परिणामस्वरूप उपयुक्त विषयों का अध्ययन करने में सक्षम हूं। @Everyone - HttpFox का उपयोग करके पता चला है कि "/ dwr" AJAX कॉल निष्पादित होने पर URL को पोस्ट किया जा रहा है। सर्वलेट मैपिंग के बारे में लियोनेल का बयान स्पॉट था। अब यह पता लगाने की बात है कि यूआरएल कैसे पोस्ट किया जाता है (क्योंकि मुझे नहीं लगता कि यह कहां सेट है ...)। मैं कुछ उपयोगी दस्तावेज के साथ मूल प्रश्न अद्यतन कर रहा हूं। – KyleM

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