2009-07-16 17 views
7

He llegado tan lejos como esto:Cómo cargar un archivo .properties en un JSP

private Properties logoUrls = new Properties(); 
logoUrls.load(new FileInputStream("channelLogos.properties")); 

donde channelLogos.properties se encuentra en el mismo directorio que mi JSP. Obtengo una excepción FileNotFound. ¿Dónde realmente piensa mi aplicación me refiero a "channelLogos.properties", si no es el mismo directorio que el JSP? ¿Cómo puedo determinar la ruta correcta para cargar el archivo de propiedades?

+0

relacionados http://stackoverflow.com/questions/3920088/jsp-servlet-read-parameters-from-properties-file –

Respuesta

3

Eche un vistazo a ServletContext.getRealPath(). Eso debería darle la ruta completa al archivo de propiedades.

+0

Eso es bueno saberlo. ¡Gracias! Usando esa técnica, me muestra que mi ruta es aparentemente correcta para mi archivo de propiedades, pero aún así obtengo una excepción de archivo no foud. ¿Algunas ideas? – morgancodes

6

Me gustaría altamente recomiendan leer sobre Model 2 Servlets. Se lo recomiendo a todos los que todavía estén haciendo Model 1 Servlets, es decir, haciendo "trabajo real" en un JSP.

cuanto a su pregunta: En primer lugar, lanzar el archivo de propiedades de la ruta de clases, a continuación, leer el archivo usando getResourceAsSttream:

 
Thread.currentThread().getContextClassLoader().getResourceAsStream("channelLogos.properties"); 

hay muchas opciones, por supuesto, y cada uno tendrá su favorito.

+0

Estoy totalmente de acuerdo con el hecho de no hacer cosas reales en una regla jsp, pero lo estoy rompiendo en el caso. – morgancodes

+0

+1 para usar classpath – Thilo

+0

@morgancodes: estoy totalmente de acuerdo con romper mis propias reglas de vez en cuando. ;) –

10

Esto hará el trabajo:

<%@page import="java.io.InputStream" %> 
<%@page import="java.util.Properties" %> 

<% 
    InputStream stream = application.getResourceAsStream("/some.properties"); 
    Properties props = new Properties(); 
    props.load(stream); 
%> 

De todos modos Realmente piensa que debería tener el archivo de propiedades en el ruta de clase y utilizar un servlet

+2

Sí, esa sería la forma correcta de hacerlo. Estoy admitiendo que estoy haciendo esto de manera rápida, fea, sucia y mala. – morgancodes

+0

Sí, lo sé, jeje ... Acabo de responder a lo que pidió;) –

+0

Para su información, hay una application.getResourceAsStream ("...") que le ahorrará unas pocas líneas de código. –

4

Cuando dice "mismo directorio que JSP", ¿Qué quieres decir con eso exactamente? Que su JSP se encuentra en algún lugar, por ejemplo, /mywebapp/somefolder/my.jsp con mywebapp siendo la raíz de la aplicación y el archivo de propiedades es /mywebapp/somefolder/channelLogos.properties?

Si es así, lo más probable es que NO estén en el mismo directorio. JSP se ha compilado y su ubicación puede variar según el contenedor de servlets. Su mejor opción es usar ServletContext.getRealPath() según lo sugerido por pkaeding con la ruta del archivo de propiedades relativa al contexto de la aplicación web como argumento. Utilizando el ejemplo anterior:

private Properties logoUrls = new Properties(); 
logoUrls.load(new FileInputStream(servletContext.getRealPath("/somefolder/channelLogos.properties"))); 

Dicho esto, ten en cuenta que si usted insiste en poner sus propiedades en la misma carpeta que JSP se debe tener cuidado para restringir que sea accesible al público (a no ser que esa es la intención).

+0

Gracias. Esto funciona. Sin embargo, estaba planeando hacer todo esto dentro de jspInit, que no tiene fácil acceso al servletContext. Tal vez un enfoque de clase es lo mejor. – morgancodes

+0

'getServletConfig().getServletContext() 'obtendrá servletContext desde el método' jspInit'. Dicho esto, el enfoque de classpath es totalmente mejor y MVC es mejor aún :-) Solo he proporcionado esta respuesta porque has insistido en que quieres hacerlo solo en JSP. – ChssPly76

Cuestiones relacionadas