2010-10-13 13 views
7

मेरे जेएसपी पृष्ठों को विभिन्न पर्यावरण प्रदर्शित करने की आवश्यकता है, इस पर निर्भर करता है कि वे किस पर्यावरण में हैं (देव, उत्पादन, सैंडबॉक्स, आदि)। मैं इन परिवेशों में से प्रत्येक के लिए एक गुण फ़ाइल रखना चाहता हूं जिसमें उन सभी पैरामीटर शामिल हैं जिनकी उन्हें आवश्यकता हो सकती है। मैं इस फ़ाइल से गुणों को जेएसपी पेज में कैसे संदर्भित कर सकता हूं?जेएसपी/सर्वलेट गुण फ़ाइल से पैरामीटर पढ़ते हैं?

मेरे विचार कर रहे हैं:

  • एक सर्वलेट सभी JSP पृष्ठों में एक मॉडल वस्तु के रूप में गुण फ़ीड तो मैं उन्हें $ की तरह संदर्भित कर सकते हैं {properties.propertyName}
  • किसी तरह इस संपत्ति संदर्भ है web.xml में फ़ाइल करें, तो शायद मैं $ {context.properties.propertyName} जैसी कुछ कहूं?
  • गुण फ़ाइल के बजाय, web.xml में पैरामीटर सूचीबद्ध करें और जेएसपी पृष्ठों में उनको संदर्भित करें। यह सुनिश्चित नहीं है कि यह कैसे करें, लेकिन मैं एक सरल गुण फ़ाइल पसंद करूंगा।

अद्यतन - मैं मैं वसंत 3.0 और स्प्रिंग webmvc उपयोग कर रहा हूँ उल्लेख किया है चाहिए। तो यदि वसंत का उपयोग करके ऐसा करने के लिए कुछ बेहतरीन अभ्यास तरीका हैं, तो यह आदर्श है!

+0

बसंत बहुत आसान हो गया होगा – Bozho

+0

मैं वसंत का उपयोग करता हूं !!! यह कैसे मदद करता है? –

उत्तर

9
  • आप एक ServletContextListener के contextInitialized(..) विधि में java.util.Properties (या commons-configuration) का उपयोग गुण लोड कर सकते हैं।

  • web.xml में <listener> साथ श्रोता रजिस्टर

  • फिर आप ServletContext में Properties की दुकान (आप घटना से प्राप्त कर सकते हैं) (ctx.setAttribute("properties", properties)

  • तो ${applicationScope.properties.propName} उपयोग करने वाली प्रॉपर्टी का उपयोग (के रूप में BalusC बताया गया है, applicationScope वैकल्पिक है)

अपडेट:

प्रारंभ में मैंने सोचा था कि वसंत के लिए इसके लिए कुछ उपयोग करने योग्य सुविधा थी, लेकिन यह पता चला कि यह बिल्कुल सही नहीं है।

  • this article ऊपर मेरी सुझाव के लिए इसी तरह कुछ बताते हैं, लेकिन वसंत के PropertyPlaceholderConfigurer

  • this answer और this answer का उपयोग कर आप सर्वलेट संदर्भ के लिए एक PropertyPlaceholderConfigurer सहित अपने सभी सेम, बेनकाब करने के लिए अनुमति देते हैं: आप दो विकल्प हैं।

+2

मामले के लिए यह ओपी को स्पष्ट नहीं है: ईएल में 'applicationScope' भाग वैकल्पिक है। – BalusC

+1

आपके अपडेट में 2 जवाब वही थे जो मैं खोज रहा था। धन्यवाद। –

0

जहां सबसे अच्छा स्थान वातावरण-विशिष्ट डेटा (संकेत: निश्चित रूप से नहीं संपत्ति फ़ाइलें) स्टोर करने के लिए है की चर्चा में जाने के बिना, मैं मूल बातें करने के लिए छड़ी जाएगा:

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

इसलिए, आपके द्वारा उल्लिखित पहला दृष्टिकोण समझ में आता है (मान लीजिए कि आप संपत्ति फ़ाइलों से पर्यावरण-विशिष्ट जानकारी को पढ़ना चाहते हैं)।

+0

आप पर्यावरण-विशिष्ट डेटा संग्रहीत करने का सुझाव देते हैं? –

+1

महीने भर महीनों में सभी विकल्पों का शोध करने के बाद - मैं इस निष्कर्ष पर पहुंचा कि संसाधन पर्यावरण प्रविष्टियों का उपयोग अब तक का सबसे लचीला दृष्टिकोण है। आपका कार्यक्रम पर्यावरण परिवर्तनों के हिस्से के रूप में कभी नहीं बदलेगा। संसाधन पर्यावरण प्रविष्टियों और यहां उनका उपयोग करने के तरीके के बारे में और पढ़ें: http://www.ibm.com/developerworks/websphere/library/techarticles/0611_totapally/0611_totapally.html - यह वेबस्पेयर से बात करता है, लेकिन ResEnvEntries की अवधारणा जे 2 ईई-मानक है और हर एप्लिकेशन सर्वर जो मुझे पता है इसका समर्थन करता है। – Isaac

0
  1. गुण प्रोजेक्ट को अपनी प्रोजेक्ट के भीतर किसी ज्ञात स्थान पर रखें। उदाहरण के लिए: /WEB-INF/config/environment.properties।
  2. एक साधारण जावा बीन क्लास बनाएं जिसमें गेटर्स (एक्सेसर्स यदि आप चाहें) प्रत्येक वांछित गुणों को उजागर करें (मैं इसे PropertyExposer क्लास के रूप में संदर्भित करूंगा)। उदाहरण के लिए: PropertyExposer.getEnvironmentName()
  3. एक स्टार्टअप वर्ग (शायद एक SessionContextListener या कम < लोड-ऑन-स्टार्टअप > मूल्य के साथ एक सर्वलेट) में, गुण लोड अपने PropertyExposer वस्तु बनाने, और सत्र में संग्रहीत (या आवेदन आपकी आवश्यकताओं के आधार पर) गुंजाइश।

उपर्युक्त करने के बाद, आपकी संपत्तियां आपकी जेएसपी फाइलों के लिए उपलब्ध होंगी।

आप एक SessionContextListener (यह मान्य कोड नहीं है, लेकिन मुद्दा बनाया जाता है) का उपयोग कर प्रारंभ करते हैं:

 

SessionContextListenser.contextInitialized(ServletContextEvent event) 
{ 
    event.getServletContext().setAttribute(); // set application scope value. 
} 
 

आप एक सर्वलेट का उपयोग कर प्रारंभ तो (यह मानते हुए आप का विस्तार GenericServlet):

 

YourServletClass.init() 
{ 
    getServletContext().setAttribute(); // set application scope value. 
} 
 
+0

मैं एप्लिकेशन स्कोप में propertyExposer को कैसे संग्रहीत और एक्सेस कर सकता हूं? मुझे विचार पसंद है, खासकर अगर मैं समय-समय पर अपने बीन के साथ फाइल को मतदान कर सकता हूं। –

0

मुझे एक ही समस्या थी। मैं अपने webmvc-config.xml फ़ाइल एक संसाधन समूह का उपयोग करने में कॉन्फ़िग फ़ाइल उजागर द्वारा इसे हल करने में सक्षम था: संदेश/> टैग:

<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource" p:basenames="classpath:META-INF/spring/config" p:fallbackToSystemLocale="false"/> 

तो मैं एक < वसंत का उपयोग कर मेरी JSPs में इसका इस्तेमाल करने में सक्षम था :

<spring:message code="reactor.appKey" var="reactorAppKey" /> 
<scrip data-app-key="${reactorAppKey}"></script> 
संबंधित मुद्दे