tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
1551
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mmonshausen mmonshausen ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    10
    Hallo,
    ich habe eine kurze Frage: Ich habe ein Servlet, dass eine Konfigurationsdatei erhalten soll, die es beim Start lesen soll. Das Servlet ist zusammen mit anderen Servlets in einem war-File verpackt. Ich möchte es jetzt so machen, dass die Konfigurationsdatei außerhalb des war-Archivs (aber noch auf dem AS) abgelegt werden soll; schließlich soll der Admin nicht das war neu packen müssen.
    Aber wie greife ich jetzt auf die Datei zu? Mein Context-Root zeigt immer nur auf den Root in dem War-File...
    Vielen Dank für Eure Antworten,

    Martin
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    schau mal hier:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    
    package de.tutorials.web;
     
    import java.io.IOException;
    import java.util.Collections;
    import java.util.Map;
    import java.util.Properties;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    /**
     * Servlet implementation class for Servlet: ExampleServlet
     * 
     */
    public class ExampleServlet extends javax.servlet.http.HttpServlet implements
            javax.servlet.Servlet {
     
        // oder besser key als init parameter in der servletdefintion im web.xml
        // ablegen
        public static final String CONFIGRUATION_FILE_NAME = "de.tutorials.web.config.properties";
     
        static final long serialVersionUID = 1L;
     
        Map<?, ?> readOnlyConfigurationSettingsMap;
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#HttpServlet()
         */
        public ExampleServlet() {
            super();
        }
     
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            Properties properties = new Properties();
            try {
                properties.load(getServletContext().getClass().getClassLoader()
                        .getResourceAsStream(CONFIGRUATION_FILE_NAME));
            } catch (IOException e) {
                e.printStackTrace();
            }
     
            this.readOnlyConfigurationSettingsMap = Collections.unmodifiableMap(properties);
     
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().println("Hallo " + readOnlyConfigurationSettingsMap.get("foo"));
     
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
        }
    }

    Damit kannst du ein File (hier: de.tutorials.web.config.properties) ins TOMCAT_HOME/lib Verzeichnis legen (bei Tomcat 6) und darauf zugreifen.

    de.tutorials.web.config.properties
    Code :
    1
    
    foo=Bar

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    mmonshausen mmonshausen ist offline Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    10
    Hallo,
    vielen Dank für die schnelle Antwort!

    Ich habe das auch gleich ausprobiert jedoch nicht mit sonderlich viel Erfolg. Bestimmt stelle ich mich einfach nur blöd an...

    Ich habe einen JBoss AS (hätte ich dazu sagen sollen, SORRY) und habe wie beschrieben das property-file in den lib-Ordner gelegt (JBoss basiert ja in punkto Servlets auf TomCat).
    Jedoch scheint die Ressource nicht gefunden zu werden:
    java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Unknown Source)
    at java.util.Properties.load0(Unknown Source)
    at java.util.Properties.load(Unknown Source)
    at com.merobase.WSExec.ReqPageGen.init(ReqPageGen.java:59)

    in Zeile 59 steht: properties.load(getServletContext().getClass().getClassLoader()
    .getResourceAsStream(CONFIG_FILE_NAME))

    Meine Anwendung liegt in /server/default/deploy; ausprobiert habe ich die Datei in /server/default/lib abzulegen...

    Btw: Neben den property-files wollte ich auch templates für Velocity extern (da der Benutzer die anlegen dürfen soll) ablegen; ist es architektonisch in Ordnung die ebenfalls im lib-Verzeichnis abzulegen?

    Vielen Dank und sorry für die blöde Frage,

    Martin
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    eine Möglichkeit wäre es die Konfigurationsdatei im JBOSS_HOME/server/XXX/data Verzeichnis abzulegen.

    Anschließend kann man dann so darauf zugreifen:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    
    package de.tutorials.web;
     
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Collections;
    import java.util.Map;
    import java.util.Properties;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    /**
     * Servlet implementation class for Servlet: ExampleServlet
     * 
     */
    public class ExampleServlet extends javax.servlet.http.HttpServlet implements
            javax.servlet.Servlet {
     
        // oder besser key als init parameter in der servletdefintion im web.xml
        // ablegen
        public static final String CONFIGRUATION_FILE_NAME = "de.tutorials.web.config.properties";
        public final static String JBOSS_DATA_DIR_LOCATION = System.getProperty("jboss.server.data.dir");
        
        static final long serialVersionUID = 1L;
     
        Map<?, ?> readOnlyConfigurationSettingsMap;
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#HttpServlet()
         */
        public ExampleServlet() {
            super();
        }
     
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            Properties properties = new Properties();
            try {
                properties.load(new FileInputStream(JBOSS_DATA_DIR_LOCATION +"/" + CONFIGRUATION_FILE_NAME));
            } catch (IOException e) {
                e.printStackTrace();
            }
     
            this.readOnlyConfigurationSettingsMap = Collections.unmodifiableMap(properties);
     
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().println("Hallo " + readOnlyConfigurationSettingsMap.get("foo"));
     
        }
     
        /*
         * (non-Java-doc)
         * 
         * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
         *      HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
        }
    }
    Das Problem hierbei ist das File IO innerhalb eines Servlets laut J2EE/JEE Spec nicht unterstützt ist.

    Desweiteren wird dein Servlet somit von JBoss abhängig, wenn man hier keine Indirektion (ConfigurationProviderStrategy) einführt...

    Eine Alternative dazu wäre noch das sogenannte Exploded Deployment:
    http://wiki.jboss.org/wiki/Wiki.jsp?...odedDeployment


    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. Zugriff auf externe Dateien
    Von dark_ghost im Forum PHP
    Antworten: 0
    Letzter Beitrag: 07.01.09, 17:42
  2. Zugriff auf eine externe CSS-Datei
    Von webzwonull im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 27.04.07, 17:16
  3. Zugriff auf externe Datenbank
    Von Radhad im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 10.01.07, 16:49
  4. Zugriff auf externe Anwendungen mit C#
    Von axel2 im Forum .NET Archiv
    Antworten: 14
    Letzter Beitrag: 16.11.04, 10:15
  5. Zugriff auf externe MySql DB
    Von Chaser im Forum Visual Basic 6.0
    Antworten: 10
    Letzter Beitrag: 30.11.02, 20:47