2010-08-29 38 views
5

Estoy haciendo una aplicación web en Eclipse (JSP) y uso Tomcat como servidor (integrado en Eclipse). Tengo que crear el objeto a continuación y especificar la ruta al archivo de configuración. Esta ruta absoluta funciona correctamente:Ruta de absoluta a relativa (Eclipse, JSP)

Store store = StoreFactory.create("file:///C:/Users/Aliens/workspace/myProject/WebContent/config/sdb.ttl"); 

Sin embargo, me pregunto por qué no puedo usar la ruta relativa. ¿Debería ser "config/sdb.ttl" a la derecha (si el nombre del proyecto es una raíz)? Pero no puede ubicarlo de esta manera (NotFoundException).

Respuesta

5

Las rutas relativas del sistema de archivos de disco son relativas al directorio de trabajo actual que depende de cómo inició la aplicación (en Eclipse sería la carpeta del proyecto, en la consola de comandos sería la carpeta abierta actualmente, en Tomcat manager/servicio sería la carpeta Tomacat/bin, etc.). No tiene control sobre esto desde dentro del código Java, así que olvídate de él.

En JSP/servlet puede utilizar ServletContext#getRealPath() para convertir una ruta de contenido web relativa (que tiene su raíz en el contenido de la web pública, en su caso, la carpeta /WebContent) en una ruta absoluta sistema de archivo de disco. Por lo tanto:

String relativeWebPath = "/config/sdb.ttl"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
Store store = StoreFactory.create(absoluteDiskPath); 
// ... 

El ServletContext está disponible en los servlets por la getServletContext() método heredado.

+0

estoy creando este objeto Almacenar en una clase que se encuentra en la carpeta src. Como esto no es JSP/Servlet, no puedo usar el método getServletContext(). En JSP instanciamos esta clase y en su constructor se genera el objeto Store. ¿Alguna otra solución? – Aliens

+0

Un archivo JSP es semánticamente el [lugar incorrecto] (http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files) para el trabajo. De todos modos, dado que los archivos JSP se compilan a un servlet, también tiene acceso al 'ServletContext' por' getServletContext() '. También puede usar la variable 'aplicación' implícita que hace referencia a la misma. Es decir. 'application.getRealPath (relativeWebPath)'. Por cierto, ¿** lo has probado ** antes de decir "No puedo usar el método"? – BalusC

+0

Oye. Por supuesto que lo intenté y todavía no está funcionando. No sé si me entiendes. No estoy llamando a getServletContext() en un JSP. Quiero llamarlo en el archivo .java en/src pero no puedo hacer eso. Este archivo .java es una clase. Y esa clase se crea una instancia en JSP. – Aliens

Cuestiones relacionadas