2009-07-16 4 views
7

ho ottenuto fino a questo un .properties:Come caricare file in un jsp

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

dove channelLogos.properties è nella stessa directory come il mio JSP. Ottengo un'eccezione FileNotFound. Dove pensa che la mia app intenda realmente "channelLogos.properties", se non la stessa directory del JSP? Come posso determinare il percorso corretto per caricare il file delle proprietà?

+0

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

risposta

3

Dai uno sguardo allo ServletContext.getRealPath(). Questo dovrebbe darti il ​​percorso completo per il file delle proprietà.

+0

Questo è bello sapere. Grazie! Usando questa tecnica, mi mostra che il mio percorso è apparentemente corretto per il mio file delle proprietà, ma ottengo comunque un'eccezione di file non foud. Qualche idea? – morgancodes

6

Mi piacerebbe altamente consiglia di leggere su Model 2 Servlets. Lo consiglio a tutti coloro che continuano a fare servlet Model 1, cioè a fare "lavoro reale" in un JSP.

quanto alla tua domanda: In primo luogo, lanciare il file di proprietà nel classpath, quindi leggere il file utilizzando getResourceAsSttream:

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

Ci sono molte opzioni, naturalmente, e tutti avranno il loro preferito.

+0

Sono totalmente d'accordo con il fatto di non fare cose vere in una regola jsp, ma lo infrango nel caso. – morgancodes

+0

+1 per usare il classpath – Thilo

+0

@morgancodes: sono totalmente d'accordo con le mie regole infrangere di volta in volta. ;) –

10

Questo farà il lavoro:

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

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

Comunque sono davvero che si dovrebbe avere il file delle proprietà nel classpath e utilizzare un servlet

+2

Sì, sarebbe il modo giusto per farlo. Sto dichiaratamente facendo questo il modo brutto, brutto, sporco, cattivo. – morgancodes

+0

Sì, lo so, hehe ... Ho appena risposto a quello che hai chiesto;) –

+0

FYI, c'è un application.getResourceAsStream ("...") che ti farà risparmiare poche righe di codice. –

4

Quando si dice "stessa directory JSP", cosa intendi esattamente con questo? Che il tuo JSP si trovi da qualche parte, per esempio, /mywebapp/somefolder/my.jsp con mywebapp come root dell'applicazione e il tuo file di proprietà è /mywebapp/somefolder/channelLogos.properties?

Se è così, allora molto probabilmente NON si trovano nella stessa directory. JSP è stato compilato e dove è effettivamente posizionato può variare a seconda del contenitore servlet. La soluzione migliore è utilizzare ServletContext.getRealPath() come suggerito da pkaeding con il percorso del file delle proprietà relativo al contesto webapp come argomento. Utilizzando l'esempio precedente:

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

Detto questo, tenere a mente che, se ti ostini a mettere le proprietà nella stessa cartella JSP si dovrebbe prendere cura di limitarlo ad essere accessibile al pubblico (a meno che questa è l'intenzione).

+0

Grazie. Questo funziona. Tuttavia, stavo progettando di fare tutto questo all'interno di jspInit, che non ha un facile accesso al servletContext. Forse un approccio al sentiero di classe è davvero il migliore. – morgancodes

+0

'getServletConfig().getServletContext() 'ti porterà servletContext dal metodo' jspInit'. Detto questo, l'approccio classpath è completamente migliore e MVC è ancora meglio :-) Ho solo fornito questa risposta perché hai insistito sul fatto che vuoi farlo solo con JSP. – ChssPly76