Bom dia galera!
Gostaria de criar este tópico para resolver de uma vez por todas o tratamento de diretórios que já vi em muitos tópicos pela internet com diversas discussões, mas sem nenhuma solução.
O grande problema é o seguinte:
Localizar o caminho para a pasta WebContent (root na aplicação java web) para ser utilizada pela classe File, ou seja:
String path = "caminho para o WebContent";
new File(path);Até agora tudo ok. Se estivessemos em uma servlet, era só utilizar: String path = getServletContext().getRealPath("/");Porém, se estivessemos executando uma classe manualmente (como por exemplo, executar pelo eclipse: Run -> Java Application -> execução do metodo “main”), a maneira para chegar no WebContent seria:String path = new File(".").getCanonicalPath();O problema é que tenho uma classe utilitária que apenas retorna o caminho do root, e então, como não sei se o código que irá chamá-la será de um servlet, ou de um “Java Application”, fiz o seguinte:
[code]public class PathRootLocator{
public String getRootPath(HttpServletRequest req) throws IOException{
if(req!=null){
// se o req não for nulo, sei que é um servlet
return req.getServletContext().getRealPath("/");
}else{
// se o req for nulo, é execução de um "Java Application"
return new File(".").getCanonicalPath();
}
}
}[/code]Desta forma, a aplicação funciona corretamente, porém sei que não deve ser a melhor forma. Esta abordagem pode causar muitos problemas, como por exemplo, eu posso esquecer de passar o HttpServletRequest de dentro de um servlet, e então, receberia o path errado.
Para tentar solucionar este problema, resolvi criar este tópico para que possamos acabar com este problema de uma vez por todas!!!
Qual seria a forma de receber o caminho certo do root da aplicação (WebContent), independentemente da forma que estivesse executando esta função (de um Servelet ou de um “Java Application”).
Agradeço antecipadamente a ajuda de todos!!