J'ai un fichier Java standard que j'utilise pour mettre à jour et interroger une base de données mysql mais je dois prendre des options configurables dans ce fichier (comme nom d'hôte, mot de passe, etc.) et le placer dans le fichier web.xml fichier si c'est une option, mais idéalement dans web.xml).
Mais je ne sais pas comment accéder aux valeurs web.xml à partir d'un fichier Java standard non-servlet.
Ou aurais-je besoin de lire le xml (comme n'importe quel autre fichier xml ... ou existe-t-il un raccourci pour cela ...)
Vous devez mettre les paramètres requis dans les entrées env-entry de votre fichier web.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 de contexte dans votre fichier web.xml et un fichier javax.servlet.ServletContextListener pour renseigner certains champs statiques.
Dans votre classe Java normale, vous lisez ceci 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 solution consiste à lire le fichier XML et à l'analyser.
Vous pouvez le mettre sur une carte statique après l'analyse dans ServletContextListener
Implémentez une 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 l'enregistrer dans 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éez une classe statique qui serait initialisée à partir de l'un des servlets init .