2010-08-29 11 views
5

Realizzo un'applicazione Web in Eclipse (JSP) e utilizzo Tomcat come server (integrato in Eclipse). Devo creare l'oggetto sottostante e specificare il percorso del file di configurazione. Questo percorso assoluto funziona perfettamente:Percorso assoluto relativo (Eclipse, JSP)

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

Tuttavia, mi chiedo perché non possa utilizzare il percorso relativo. Dovrebbe essere a destra "config/sdb.ttl" (se il nome del progetto è una radice)? Ma non può individuarlo in questo modo (NotFoundException).

risposta

5

I percorsi del file system del disco relativo sono relativi alla directory di lavoro corrente che dipende da come è stata avviata l'applicazione (in Eclipse sarebbe la cartella del progetto, in Command console sarebbe la cartella attualmente aperta, in Tomcat manager/servizio sarebbe la cartella Tomacat/bin, ecc.). Non hai il controllo su questo da dentro il codice Java, quindi non pensarci più.

In JSP/Servlet è possibile utilizzare ServletContext#getRealPath() per convertire un percorso relativo del contenuto Web (ha la sua radice nel contenuto Web pubblico, nel caso specifico la cartella /WebContent) in un percorso assoluto del file system del disco. Quindi:

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

Il ServletContext è disponibile in servlet da parte del getServletContext() metodo ereditato.

+0

sto creando questo oggetto Conservare in una classe che si trova nella cartella src. Poiché non si tratta di JSP/Servlet, non è possibile utilizzare il metodo getServletContext(). In JSP istanzia questa classe e nel suo costruttore viene generato l'oggetto Store. Qualche altra soluzione? – Aliens

+0

Un file JSP è semanticamente il [posto sbagliato] (http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files) per il lavoro. Indipendentemente dal fatto che i file JSP sono compilati su un servlet, ha anche accesso a 'ServletContext' di' getServletContext() '. Puoi anche usare la variabile implicita 'applicazione' che si riferisce allo stesso modo. Cioè 'Application.getRealPath (relativeWebPath)'. A proposito, hai davvero ** provato prima di dire "Non posso usare il metodo"? – BalusC

+0

Ehi. Certo che l'ho provato e non funziona ancora. Non so se mi capisci. Non sto chiamando getServletContext() in un JSP. Voglio chiamarlo in .java file in/src ma non posso farlo. Questo file .java è una classe. E questa classe viene istanziata in JSP. – Aliens