2010-01-18 19 views
6

¿Cómo puedo obtener el nombre de la aplicación web actual en Java EE?¿Cómo puedo obtener el nombre de la aplicación web actual en Java EE?

Estoy bastante cómodo con Java autónomo, pero Java EE es nuevo para mí. Estoy escribiendo un código personalizado para conectarlo a un paquete de informes Java EE de terceros. Tengo varias instancias desplegadas en el mismo servidor Tomcat, así que tengo algo así como:

 
C:\ 
+-- tomcat6 
    +-- webapps 
     +-- app1 
     +-- app2 

Así que cuando el usuario va a, digamos, http://example.com/app1/viewReport, quiero ser capaz de conseguir "app1". (Y no mediante el análisis sintáctico de la URL, preferiblemente)

Además, si hay una forma de obtener la raíz de la aplicación 1 (en este ejemplo, C: \ tomcat6 \ webapps \ app1), eso también sería genial.

Respuesta

11

1. Obteniendo el "nombre"

Se llama la ruta del contexto. Si su código se ejecuta dentro del contexto de solicitud de la aplicación web, puede obtenerlo llamando al HttpServletRequest#getContextPath().

2. Acceso a la física/real de los recursos

Si usted está tratando de acceder al contenido de un archivo/recurso en su aplicación web, que eres el mejor de utilizar uno de:

también es posible obtener la ruta física en el disco de un archivo/recurso, dada la ruta relativa a la aplicación web, utilizando ServletContext#getRealPath(String), pero no es confiable (no siempre funciona si implementa su aplicación web como WAR, por ejemplo).

3. Recursos ruta de clase Acceso

por su comentario, estaban tratando de acceder a un recurso dentro del directorio/classes/WEB-INF. Debido a que WEB-INF/classes/* es donde van las clases específicas de la aplicación web, puede simplemente acceder a ella como si estuviera accediendo a cualquier recurso classpath en una aplicación Java SE. Una vez más, asumiendo que su código se ejecuta en el contexto de la aplicación web, puede simplemente usar el siguiente:

En su caso, usted probablemente querrá utilizar este último , y luego cargue el archivo de Propiedades a través de Properties # load (InputStream).

Algo a lo largo de las líneas de:

Properties props = new Properties(); 
props.load(getClass().getResourceAsStream("/reportCustom.properties")); 
+0

gracias por su ayuda. Lo que intento hacer es cargar un archivo de propiedades en 'webapps/myapp/WEB-INF/classes/reportCustom.properties'. ¿Es esta una manera más simple de hacerlo? en el pasado, obtuve System.getProperty ("myapp.root"), con una cadena codificada, que es una propiedad de web.xml que proporciona la ruta raíz. Pero luego descubro que necesitamos admitir varias instancias en el mismo Tomcat, por lo que no sé a qué se llamará "myapp". – Jenni

+0

En su caso, puede acceder a reportCustom.properties como si estuviera simplemente en el classpath. Actualizaré mi respuesta para incluir esto en breve. –

2

lo que estoy tratando de hacer es cargar un archivo de propiedades en webapps/miaplicacion/WEB-INF/classes/reportCustom.properties

Como el archivo está en el directorio classes, puede cargarlo usando ClassLoader (el mecanismo habitual de Java para cargar archivos en la ruta de clase). Probablemente sea mejor usar el context ClassLoader.

Cuestiones relacionadas