Pegar diretorio da aplicação web no tomcat [RESOLVIDO]

Pessoal, tem algum macete pra pegar o diretorio da aplicação no tomcat?
se eu usar File(“teste.txt”) ele aponta para o diretorio lib do tomcat, bem doido!

[]'s

hm…chutando aqui ao que me lembro, tente fazer isso em uma classe Servlet

String path = this.getServletContext().getRealPath("");

[quote=alias]hm…chutando aqui ao que me lembro, tente fazer isso em uma classe Servlet

String path = this.getServletContext().getRealPath(""); [/quote]

essa instrução que vc passou funciona somente se estiver dentro de uma servlet ou jsp. mas preciso pegar de uma classe que nao possui uma referencia ao objeto ServletContext.

[]'s

[quote=mauricioadl][quote=alias]hm…chutando aqui ao que me lembro, tente fazer isso em uma classe Servlet

String path = this.getServletContext().getRealPath(""); [/quote]

essa instrução que vc passou funciona somente se estiver dentro de uma servlet ou jsp. mas preciso pegar de uma classe que nao possui uma referencia ao objeto ServletContext.

[]'s[/quote]

De fato, é preciso a referencia ao ServletContext, me desculpe se minha dica foi deveras simplista. Mas então gambiarras alternativas provavelmente serão necessárias no seu caso :lol: … qual é o cenario aí, frameworks e tal?

o cenario eh bastante simples, preciso carregar um arquivo que tenha informações da conexao com o banco de dados. a classe que faz isso eh a fabrica de conexoes.

[quote]

De fato, é preciso a referencia ao ServletContext, me desculpe se minha dica foi deveras simplista. Mas então gambiarras alternativas provavelmente serão necessárias no seu caso :lol: … qual é o cenario aí, frameworks e tal?[/quote]

nao diria q sua informação eh simplista não, pelo contrario, ela eh muito util, nao no meu caso, mas pra quem acessar o topico futuramente.

Você não pode colocar o .jar da fábrica de conexões no WEB-INF/lib e o arquivo de configuração lá dentro também ?

Nesse caso é mais tranquilo, onde está esse arquivo? Dentro de WEB-INF/classes? Se sim, você consegue acessar esse arquivo com suaclasse.getResource() ou getResourceAsStream(), e a partir daí criar um File.

Você não pode colocar o .jar da fábrica de conexões no WEB-INF/lib e o arquivo de configuração lá dentro também ?[/quote]

o pior q nao, tem um padrao para arquivos de configuração aqui e nao pode ser mudado. se mudar a cor do capim muito cabrito vai passar fome! se eh q vc me entende!!!

acho q vou fazer isso mesmo, pegar o local da classe e sair quebrando para tras ate chegar no diretorio da app, gambiarra detected! hehehe

Esse arquivo está na raiz da aplicação, entao?

isso mesmo!

isso mesmo![/quote]

Um arquivo com configurações de acesso a base de dados, na raiz da app web?

Digite a URL para esse arquivo no seu browser…

isso mesmo![/quote]

Um arquivo com configurações de acesso a base de dados, na raiz da app web?

Digite a URL para esse arquivo no seu browser…[/quote]

nao acontece oq vc esta pensando nao hehehe. aconteceria se estivesse dentro da pasta WebContent, ae seria bem engraçado !

meu caso eh assim:

minha_app
-meu_arquivo.txt
-WebContent
---------------WEB-INF
---------------META-INF

acho q vou fazer isso mesmo, pegar o local da classe e sair quebrando para tras ate chegar no diretorio da app, gambiarra detected! hehehe[/quote]

Você pode fazer um ServletContextListener e setar a localização do arquivo, ou os próprios dados da conexão como propriedades do sistema:

System.setProperty("com.meu.sistema.database.config.file" , servletContext.getRealPath());

e dentro da fábrica você lê a propriedade:

String filePath = System.getProperty("com.meu.sistema.database.config.file");

isso mesmo![/quote]

Um arquivo com configurações de acesso a base de dados, na raiz da app web?

Digite a URL para esse arquivo no seu browser…[/quote]

nao acontece oq vc esta pensando nao hehehe. aconteceria se estivesse dentro da pasta WebContent, ae seria bem engraçado !

meu caso eh assim:

minha_app
-meu_arquivo.txt
-WebContent
---------------WEB-INF
---------------META-INF[/quote]

Bom, mas isso é no Eclipse … Como fica o arquivo .war/pasta do deploy no Tomcat ?

acho q vou fazer isso mesmo, pegar o local da classe e sair quebrando para tras ate chegar no diretorio da app, gambiarra detected! hehehe[/quote]

Você pode fazer um ServletContextListener e setar a localização do arquivo, ou os próprios dados da conexão como propriedades do sistema:

System.setProperty("com.meu.sistema.database.config.file" , servletContext.getRealPath());

e dentro da fábrica você lê a propriedade:

String filePath = System.getProperty("com.meu.sistema.database.config.file");

[/quote]

Otima ideia! Vou fazer isso!!!