2014-08-28 14 views
5

Sto tentando di eseguire un progetto Web Java in Tomcat 8 che viene eseguito tradizionalmente sotto WebSphere. Un servlet effettua la seguente chiamata:getServletContext(). GetRealPath() in Tomcat 8 restituisce il percorso errato

xslFilePath = config.getServletContext().getRealPath(System.getProperty("file.separator") + "xsl"); 

config è un'istanza di ServletConfig.

xsl è all'interno del progetto e distribuito come C: \ myproject \ build \ web \ xsl. Quando il servlet tenta di fare riferimento a un file che si trova in xslFilePath, viene visualizzata un'eccezione che indica che Tomcat sta effettivamente cercando il file xsl in C: \ Programmi \ Apache Software Foundation \ Apache Tomcat 8.0.3 \ bin \ null. Ovviamente questa è la posizione sbagliata e non viene trovato nulla.

Purtroppo non riesco a cambiare il codice perché non ho accesso alla fonte. Quindi mi piacerebbe sapere se questo è il comportamento previsto per Tomcat? Esiste una configurazione Tomcat che mi consenta di garantire che il percorso faccia riferimento alla directory di distribuzione e non alla directory bin di Tomcat? Sarebbe preferibile scegliere un altro contenitore servlet? Tutto il consiglio sarebbe apprezzato.

risposta

9

Utilizzare getRealPath ("/ xsl").

Il parametro per getRealPath() è un "percorso virtuale" che - sfortunatamente - è un concetto utilizzato nei documenti Java ma non è effettivamente definito da nessuna parte. Si presume che sia un percorso verso una risorsa nella tua applicazione web e il separatore in quel caso è sempre '/' indipendentemente dalla piattaforma.

+11

Questa risposta è corretta, ma non si tratta solo di utilizzare il separatore di percorso errato. Le versioni precedenti di Tomcat consentivano getRealPath ("xsl") senza alcun separatore iniziale, ma Tomcat 8 richiede "/ xsl" (altrimenti restituisce null). Questo ha rotto molte delle mie applicazioni web personali, la maggior parte delle quali è sopravvissuta non compilata dai tempi di Tomcat 5 ... – sam

Problemi correlati