2010-01-06 16 views
8

Tengo un servlet implementado como una guerra en JBoss 4.0.2. Tengo un archivo de propiedades para la aplicación implementada. ¿Dónde debería poner este archivo? Debajo del directorio conf en la carpeta jboss server \ default \ conf? ¿Cómo puedo cargar ese archivo de propiedades de manera portátil?Cargar archivo de propiedades en un servlet java desplegado en JBoss como guerra

+0

El proyecto que requería esto se canceló, así que nunca hice un seguimiento. – Carlosfocker

Respuesta

17

que cargue el archivo de propiedades en un portátil forma , la mejor manera sería ponerlo en la ruta de clase de la aplicación web (ya sea en un frasco bajo WEB-INF/lib/ o bajo WEB-INF/classes/ o en la ruta de clase del servidor de aplicación, si usted quiere para poder editar ese archivo sin volver a empacar su aplicación web) y para usar Class#getResourceAsStream(String).

El código siguiente obtiene un InputStream para un archivo de propiedades que reside en el mismo paquete que el servlet en el que se ejecuta el código:

InputStream inStream = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("myfile.properties"); 

Entonces, load(InputStream) en un (manejo de excepciones saltar) Properties objeto :

Properties props = new Properties(); 
props.load(inStream); 
1

El mejor lugar para poner es bajo el propio doc-root las aplicaciones web, así como "./WEB-INF/myapp.properties", es decir, en relación a que el contenedor de servlets desempaquetado el archivo o .war.ear. Puede proporcionar el archivo de propiedades directamente en el .war.

El ServletContext tiene un método getRealPath(String path) que devuelve la ruta real en el sistema de archivos. Usando la ruta real, puede cargarla en una colección Properties.

actualización El código en su comentario trata de las operaciones de búsqueda camino real para "/", se debe pedir la ruta relativa a sus propiedades de archivo, como en:

String propertiesFilePath = getServletContext().getRealPath("WEB-INF/application.properties"); 
Properties props = properties.load(new FileInputStream(propertiesFilePath)); 
+0

Así que probé lo siguiente: String propertiesFilePath = getServletContext(). GetRealPath ("/") + File.separator + "WEB-INF" + File.separator + "application.properties"; properties.load (new FileInputStream (propertiesFilePath)); Obtengo una excepción FileNotFoundException. No veo lo que hice mal. – Carlosfocker

2

Si el archivo de propiedades se se desplegará junto con la aplicación para que forme parte de su árbol fuente. Esto dará como resultado que el archivo de propiedades esté en la carpeta WEB-INF/classes.

Esto se puede leer usando

Properties properties = loadProperties("PropertyFileName.properties", this.getClass()); 
... 

public static Properties loadProperties(String resourceName, Class cl) { 
    Properties properties = new Properties(); 
    ClassLoader loader = cl.getClassLoader(); 
    try { 
     InputStream in = loader.getResourceAsStream(resourceName); 
     if (in != null) { 
      properties.load(in); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return properties; 
} 
4

Sólo controlar la ServletContext y luego

InputStream stream = getServletContext().getResourceAsStream("/WEB-INF/log4j.properties"); 
Properties props = new Properties(); 
props.load(stream); 

Esto siempre va a funcionar, independientemente de si se implementa una guerra o la guerra explotó.

Cuestiones relacionadas