Comment puis-je lire le paramètre de contexte/web.valeurs xml dans un fichier java non-servlet?

j'ai un fichier java régulier que j'utilise pour mettre à jour et interroger une base de données mysql mais j'ai besoin de prendre des options configurables dans ce fichier (comme le nom d'hôte, mot de passe, etc) et de le mettre dans le web.fichier xml (ou peut-être un autre fichier si c'est une option, mais, idéalement dans le web.XML.)

mais je ne sais pas comment accéder au web.valeurs xml d'un fichier java non-servlet régulier.

ou devrais-je lire le xml (comme tout autre fichier xml)... ou est-il un raccourci route de ce...)

19
demandé sur Kirn 2010-11-16 18:21:27

5 réponses

vous devez mettre les paramètres requis dans les entrées env-entry de votre web.fichier xml:

<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>

et ensuite y accéder via le contexte 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");
30
répondu stjohnroe 2015-09-16 14:15:00

vous pouvez utiliser des paramètres contextuels dans votre web.xml et un javax.servlet.ServletContextListener pour alimenter certains champs statiques.

dans votre classe java normale, vous pouvez lire ces champs statiques.

<?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>

Vous pouvez accéder à ce paramètre de contexte avec ServletContext.getInitParameter

10
répondu Ralph 2010-11-16 15:33:26

une façon est de lire le fichier xml et de l'analyser.

Vous pouvez le mettre sur une carte statique après avoir analysé ServletContextListener

3
répondu Jigar Joshi 2010-11-16 15:26:56

implémenter un ServletContextListener:

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) {}

}

Et n'oubliez pas de vous inscrire web.xml:

<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>
1
répondu Hank 2016-06-08 08:38:20

créer une classe statique qui serait initialisée à partir d'un des servlets init.

0
répondu Eugene Kuleshov 2010-11-16 15:36:05