2015-01-13 9 views
7

मैं अपने वैडिन 7 ऐप के भीतर से वर्तमान ServletContext तक कैसे पहुंचूं?वैडिन 7 ऐप के भीतर से 'ServletContext` तक कैसे पहुंचे?

मैं अपने Vaadin अनुप्रयोग के लिए कुछ वैश्विक स्थिति को प्रबंधित करने ServletContext वस्तु की setAttribute, getAttribute, removeAttribute, और getAttributeNames तरीकों का उपयोग करना चाहते हैं।

इसके अलावा, यदि उस उद्देश्य के लिए उन तरीकों का उपयोग करना वैडिन ऐप्स के लिए अनुचित है, तो कृपया समझाएं।

+0

संबंधित प्रश्न: [मेरे वैडिन वेब ऐप के लिए हुक शुरू करना और रोकना?] (Http://stackoverflow.com/q/36588743/642706) –

उत्तर

20

tl; डॉ

VaadinServlet.getCurrent().getServletContext() 

VaadinServlet

VaadinServlet वर्ग एक getServletContext विधि इनहेरिट करती है।

VaadinServlet वस्तु पाने के लिए, स्थिर वर्ग विधि getCurrent कहते हैं।

अपने Vaadin अनुप्रयोग के भीतर कहीं भी सबसे से, कुछ इस तरह करते हैं:

ServletContext servletContext = VaadinServlet.getCurrent().getServletContext(); 

चेतावनी
पृष्ठभूमि धागे में काम नहीं करता। आपके द्वारा लॉन्च किए गए थ्रेड में, यह आदेश NULL देता है। दस्तावेज के रूप में:

अन्य मामलों में, (जैसे पृष्ठभूमि धागे से किसी अन्य तरीके से शुरू हुआ), वर्तमान सर्वलेट स्वचालित रूप से परिभाषित नहीं होता है।

@WebListener (ServletContextListener)

वैसे, आप इस तरह के वैश्विक राज्य हैंडल करना चाहते हैं की संभावना है जब कंटेनर में वेब अनुप्रयोग तैनात (प्रक्षेपण)।

ServletContextListener इंटरफ़ेस को लागू करने वाली कक्षा में @WebListener एनोटेशन के साथ आप अपने वैडिन वेब ऐप की तैनाती में शामिल हो सकते हैं। उस इंटरफेस के दोनों तरीके, contextInitialized और contextDestroyed, ServletContextEvent पास किए गए हैं, जिससे आप getServletContext पर कॉल करके ServletContext ऑब्जेक्ट तक पहुंच सकते हैं।

@WebListener ("Context listener for doing something or other.") 
public class MyContextListener implements ServletContextListener 
{ 

    // Vaadin app deploying/launching. 
    @Override 
    public void contextInitialized (ServletContextEvent contextEvent) 
    { 
     ServletContext context = contextEvent.getServletContext(); 
     context.setAttribute(…) ; 
     // … 
    } 

    // Vaadin app un-deploying/shutting down. 
    @Override 
    public void contextDestroyed (ServletContextEvent contextEvent) 
    { 
     ServletContext context = contextEvent.getServletContext(); 
     // … 
    } 

} 

यह हुक अपने Vaadin एप्लिकेशन के हिस्से के रूप में कहा जाता है Vaadin सर्वलेट (या अपने वेब अनुप्रयोग में किसी भी अन्य सर्वलेट/फिल्टर) निष्पादित करने से पहले प्रारंभ किया जा रहा है। contextInitialized विधि पर दस्तावेज़ उद्धृत करने के लिए:

सूचना प्राप्त करता है कि वेब एप्लिकेशन प्रारंभिक प्रक्रिया शुरू हो रही है। सभी ServletContextListeners को वेब प्रारंभ में किसी भी फ़िल्टर या servlets प्रारंभ करने से पहले संदर्भ प्रारंभिकरण के बारे में अधिसूचित किया जाता है।

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