Estou usando uma Aplicação Struts (sem linchamentos, por favor!). Preciso ler um arquivo de properties que está dentro do WEB-INF e por isso preciso saber onde está minha aplicação.
Experimentei tentar instanciar File passando o diretório local no construtor (File f = new File("."); ). Entretanto não deu certo. Se eu acionava o Tomcat pelo Eclipse, aparecia o diretório do Eclipse. Se eu acionava o Tomcat diretamente, aparecia o diretório do Tomcat.
Uma solução que achei foi estender um servlet (no meu caso específico o ActionServlet) e sobrescrever o init():
Não gosto dessa solução, mas não consegui idéia melhor. Por isso estou pedindo sugestões. Por exemplo, será que não existe um método do tipo System.getPathAplicacao() ou Class.getPathOndeEstou(), de preferência que seja independente da API do Servlet?
Esta solução não me agradou pois significa que tenho que sobrescrever uma classe apenas para determinar um valor de uma variável. E isso me obriga a alterar o do web.xml para colocar o meu ActionServlet no lugar do original. Não me paraceu muito “estética”.
furetz:
Onde o arquivo deve estar para que o ClassLoader o pegue? No classpath? Em [diretório da aplicação]/WEB-INF/classes ?
Olá colega, creio que uma boa solução seria usar o obj URL que permite obter os nomes dos arquivos de forma relativa, veja esse tópico do TheServerSide, talvez com alguma adaptação resolva seu problema.