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...)
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");
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
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
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>
créer une classe statique qui serait initialisée à partir d'un des servlets init.