servletcontext servlet getservletcontext ejemplo context java servlets web.xml

java - ejemplo - getservletcontext()



¿Cómo puedo leer los valores del parámetro de contexto/web.xml en un archivo java que no sea un servlet? (5)

Cree una clase estática que se inicializará desde uno de los servlets init .

Tengo un archivo java regular que utilizo para actualizar y consultar una base de datos mysql, pero necesito tomar opciones configurables en ese archivo (como nombre de host, contraseña, etc.) y colocarlo en el archivo web.xml (o tal vez en otro archivo si eso es una opción, pero idealmente en web.xml).

Pero no sé cómo obtener acceso a los valores web.xml desde un archivo java normal que no sea un servlet.

O necesitaría leer el xml (como cualquier otro archivo xml ... o hay una ruta de acceso directo a este ...)


Debe colocar los parámetros necesarios en las entradas de entrada env de su archivo 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>

y luego acceder a ellos a través del contexto 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");


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

Y no olvides registrarlo en 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>


Podrías usar parámetros de contexto en tu web.xml y un javax.servlet.ServletContextListener para rellenar algunos campos estáticos.

En tu clase java normal lees esto en estos campos estáticos.

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

Puede acceder a este parámetro de contexto con ServletContext.getInitParameter


Una forma es leer el archivo xml y analizarlo.

Puede ponerlo en algún mapa estático después de analizar en ServletContextListener