2015-10-20 4 views
6

मुझे अपने स्प्रिंग एमवीसी 3.2 एप्लिकेशन में अजीब व्यवहार का अनुभव हो रहा है, और मैंने देखा कि यह तब होता है जब रीडायरेक्ट वैकल्पिक तरीके से किया जाता है; तो मेरे सवाल कर रहे हैं:स्प्रिंग एमवीसी में, 'रीडायरेक्ट: प्रोसेस' या 'रीडायरेक्ट:/प्रोसेस' का उपयोग करके गुम सत्र या सत्र मूल्य के कारण भिन्न होता है?

  1. कर रही है 'पुन: निर्देश:/प्रक्रिया': एक आंतरिक नियंत्रक के लिए पुनः निर्देशित के लिए 'प्रक्रियारीडायरेक्ट' किसी भी से अलग है?

    क्या अतिरिक्त स्लैश सत्र में हैंडलिंग को प्रभावित करने में कोई फर्क पड़ता है?

  2. क्या एक खो सत्र (या खो सत्र विशेषताएँ) के लिए कारण हैं?

    मेरे आवेदन के माध्यम से मैंने एक मूल्य पढ़ा है; यहां तक ​​कि तू मैं कई मामलों में रीडायरेक्ट करते हैं, जब मैं नियंत्रक URI से पहले एक स्लेश जोड़ने के लिए, उत्पादन पर मैं कभी कभी यह मान खोने कर रहा हूँ।

    खोए गए सत्र मूल्य का निवारण कैसे करें इस पर कोई सुराग?

नोट: मैं तरीकों का उपयोग कर रहा httpRequest.getSession().setAttribute और httpSession.getAttribute सत्र तक पहुँचने के लिए।

+0

स्टैकट्रैस? त्रुटि? कोड त्रुटि उत्पन्न कर रहा है? –

+0

मुझे उस मूल्य के कारण एक NullPointerException मिलता है जो मैं सत्र से शून्य प्राप्त कर रहा हूं। यह दिन के दौरान एक दर्जन बार होता है। –

+0

यह एक जीईटी नियंत्रक विधि में होता है, जब मैं वापस (दृश्य नाम के रूप में) मान 'रीडायरेक्ट:/प्रक्रिया' देता हूं। ध्यान दें, मैं इसे स्थानीय रूप से पुन: उत्पन्न नहीं कर सकता। –

उत्तर

0

बस एक नोट: / एक स्लैश है, बैकस्लैश \ है।

अन्य त्रुटियों के कारण बाह्य कारणों को छोड़कर, redirect:processredirect:/process सत्र के संबंध में तब तक कुछ भी बदलना चाहिए जब तक सत्र का संबंध नहीं है।

लेकिन उन 2 रीडायरेक्ट एक ही काम करने के लिए नहीं हैं, जब तक कि आप रूट एप्लिकेशन पेज पर न हों। यह मानते हुए कि आपका एप्लिकेशन सर्वर.डोमेन पर HTTP पोर्ट 80 पर मैपैप के सर्वलेट संदर्भ के साथ चलता है, और आप http://server.domain/myapp/local/part, redirect:process पर अनुरोध संसाधित कर रहे हैं, http://server.domain/myapp/local/part/process अनुरोध करने के लिए ब्राउज़र से पूछेगा, जब redirect:/process ब्राउज़र से http://server.domain/myapp/process का अनुरोध करने के लिए कहेंगे।

अगला क्या होता है आपके नियंत्रक मैपिंग पर निर्भर करता है।

+0

यह बहुत अजीब है तो। मुझे नियंत्रक यूआरआई 'http: // डोमेन/ऐप/नतीजे' पर एक प्रतिक्रिया प्राप्त होती है, लेकिन मैं 'रीडायरेक्ट: प्रोसेस' करता हूं मैं कंट्रोलर को RequestMapping 'प्रक्रिया' (और 'परिणाम/प्रक्रिया' नहीं) पर मार रहा हूं। आपके विवरण के आधार पर, यह संभव नहीं होना चाहिए –

+0

क्या नियंत्रक "/process.htm" के लिए @RequestMapping मान है? यदि हां, तो क्या आपने "रीडायरेक्ट: /process.htm" का उपयोग करने का प्रयास किया है? – QuestionMarks

+0

नहीं, कोई '.htm' प्रत्यय नहीं है, मैं अपने सही नियंत्रक तक पहुंच रहा हूं, लेकिन सत्र खोना, चाहे मैं 'रीडायरेक्ट: प्रक्रिया' या 'रीडायरेक्ट/प्रोसेस' करता हूं, वही है। –

1
साथ '/' आप जड़ से एक रास्ता है, जो आपके सर्वलेट संदर्भ पथ है की घोषणा कर रहे हैं

। '/' के बिना, आमतौर पर यह आपके वर्तमान उप पथ से संबंधित पथ पर जा रहा है। उदाहरण के लिए, यदि आप '/ go/url' पर हैं, तो आप '/ go/url/next' पर इंगित कर रहे हैं, नहीं '/ अगला'।

मैं वसंत स्रोत कोड की जांच नहीं की, बल्कि यह है कि कैसे यह आम तौर पर वेब ब्राउज़र में काम करता है।

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

मैं माफी चाहता हूँ, स्प्रिंग MVC में, आप हमेशा पूरा पथ, न सिर्फ रिश्तेदार पथ प्रदान करनी चाहिए। तो आपको "रीडायरेक्ट/पूर्ण/पथ" करना चाहिए।

+0

ठीक है, और मैं अब '/' से शुरू होने वाले पथ का उपयोग कर रहा हूं, सब ठीक है। हालांकि मैंने नहीं देखा कि खोया सत्रों के बारे में आपका उत्तर कैसे प्रासंगिक है। –

+0

आप शायद उस स्थान को दोबारा जांचना चाहते हैं जो आप सेटिंग कर रहे हैं, पहले स्थान पर शून्य नहीं है ... –

0

शायद आप विश्लेषण करना चाहते हैं, खोए गए सत्र विशेषताओं का कारण क्या है। एक दृष्टिकोण आपके स्वयं के HttpSessionAttributeListener को लागू करना होगा और public void attributeRemoved(HttpSessionBindingEvent event) कार्यान्वयन में लॉग इन करना होगा।डीबग करने के लिए वसंत लॉग स्तर भी रखें।

+0

धन्यवाद, हालांकि मैं उत्पादन पर डीबग का उपयोग नहीं कर सकता, और यह अभी तक स्थानीय रूप से पुन: उत्पन्न नहीं हुआ है। इसलिए मैंने जो कुछ बताया है उसे लागू करूँगा और देखें कि क्या हो रहा है। –

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