2010-11-16 13 views
18

मुझे एक नियमित जावा फ़ाइल मिली है जिसका उपयोग मैं एक mysql डेटाबेस को अद्यतन और क्वेरी करने के लिए करता हूं लेकिन मुझे उस फ़ाइल में कॉन्फ़िगर करने योग्य विकल्प लेने की आवश्यकता है (जैसे होस्ट नाम, पासवर्ड इत्यादि) और इसे web.xml फ़ाइल में डालें (या शायद एक और फ़ाइल अगर यह एक विकल्प है, लेकिन आदर्श रूप से web.xml में)।मैं गैर-सर्वलेट जावा फ़ाइल में संदर्भ पैरामीटर/web.xml मानों को कैसे पढ़ सकता हूं?

लेकिन मुझे नहीं पता कि नियमित गैर-सर्वलेट जावा फ़ाइल से web.xml मानों तक पहुंच कैसे प्राप्त करें।

या मैं xml पढ़ने के लिए की आवश्यकता होगी (किसी अन्य xml फ़ाइल की तरह ... या वहाँ इस के लिए एक शॉर्टकट मार्ग है ...)

+1

आपको लगता है कि यह "नियमित गैर सर्वलेट जावा फ़ाइल" instantiated है उल्लेख करने के लिए वास्तव में था और 'ServletContextListener # संदर्भ में निष्पादित किया गया प्रारंभ() '(आपके पिछले प्रश्न के अनुसार)। इससे सही उत्तर में बहुत अंतर आएगा ... – BalusC

+0

आप किस सर्वर का उपयोग कर रहे हैं? टॉमकैट, जेबॉस, ??? सर्वर पैराम्स के आधार पर सर्वर के उदाहरण स्तर पर कई तरीकों से सेट किया जा सकता है। – stjohnroe

उत्तर

3

एक तरह से xml फ़ाइल पढ़ सकते हैं और यह पार्स करने के लिए है।

आप ServletContextListener

30

में पार्स करने के बाद में कुछ स्थिर मानचित्र पर डाल सकते हैं आप अपने web.xml फ़ाइल का env प्रविष्टि प्रविष्टियों में आवश्यक पैरामीटर रखना होगा:

<env-entry> 
    <env-entry-name>dbhost</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>localhost</env-entry-value> 
</env-entry> 

और फिर पहुंच JNDI संदर्भ

import javax.naming.Context; 
import javax.naming.InitialContext; 
... 
// Get the base naming context 
Context env = (Context)new InitialContext().lookup("java:comp/env"); 

// Get a single value 
String dbhost = (String)env.lookup("dbhost"); 
+0

env-entry-value से पहले env-entry-type निर्दिष्ट करना सुनिश्चित करें, या आपको XML सत्यापन त्रुटियां मिल सकती हैं। – luke

+0

शायद आप आयात जोड़ सकते हैं। :) – alexander

+0

@alexander वहां आप – stjohnroe

10

आप अपने web.xml और एक javax.servlet.ServletContextListener में संदर्भ के मापदंडों इस्तेमाल कर सकते हैं के माध्यम से उन्हें कुछ स्थिर फाई को भरने के लिए elds।

सामान्य जावा क्लास में आप इसे यह स्थिर फ़ील्ड पढ़ते हैं।

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
... 
<context-param> 
    <description>Prameter</description> 
    <param-name>myParam</param-name> 
    <param-value>123456790</param-value> 
</context-param> 
... 
</web-app> 

आप ServletContext.getInitParameter

0

साथ इस संदर्भ पैरामीटर का उपयोग कर सकते एक स्थिर वर्ग कि servlets init में से एक से प्रारंभ किया जाएगा बनाएँ।

package util; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class MyConfigListener implements ServletContextListener { 
    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
     ServletContext ctx = sce.getServletContext(); 

     String hostname = ctx.getInitParameter("my.config.hostname"); 

     // now go and do something with that 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) {} 

} 

और भूल नहीं है web.xml में यह रजिस्टर करने के लिए:

+1

यहां कठिनाई * * * सर्वलेट की init में है। आप नहीं चाहते हैं कि आपका एप्लिकेशन उस पर भरोसा करे जब सर्वलेट पहले शुरू होता है। –

1

एक ServletContextListener लागू

<context-param> 
    <param-value>somewhere.example.org</param-value> 
    <param-name>my.config.hostname</param-name> 
</context-param> 
<listener> 
    <listener-class>util.MyConfigListener</listener-class> 
</listener> 

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

  • कोई संबंधित समस्या नहीं^_^