[Servlet]Pegar path da aplicação

Olá:

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():

    public void init() throws ServletException {
        super.init();
        Util.PATH_DIR = this.getServletContext().getRealPath("");
    }

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?

Grato,

Eh a melhor e mais simples solucao. Nao vejo pq nao usar ela.

Rafael

Qndo preciso carregar algum .properties deixo ele no diretório de classes da aplicação e uso o código:

E funciona legal, nunca deu power.

[]'s

Rafael:

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 ?

Grato,

É só usar:

getServletContext().getResourceAsStream("/WEB-INF/xxx.xxx");

Em aplicações web você deve acessar os recursos como InputStreams, pois nem todos os servidores descompactam os arquivos .war e .ear. :shock:

Deixo os arquivo no [diretório da aplicação]/WEB-INF/classes

[]'s

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.

http://www.theserverside.com/discussions/thread.tss?thread_id=29618

Boa sorte.

furetz:

Sua solução foi o que pareceu mais interessante, pois ela é independente da API do Struts.

Luciano:

A solução da página que você recomendou me pareceu uma versão mais compilicada da solução do furetz.

Obrigado a todos,